解释错误:ISO C++不允许没有类型声明`Personlist'。

4
我有一个类,要处理我之前创建的另一个类的对象数组(这个类已经可以正常工作)。问题出现在我尝试创建我的列表类的对象时。
这是列表类的头文件:
#ifndef personlistH
#define personlistH
#include "Person.h"
#include <iomanip>
#include <iostream>
#define SIZE 10

namespace std {

    class PersonList {
private:
    Person persons[SIZE];
    int arrnum;
    string filename;

public:
    Personlist();
    };
}
#endif

这是主要函数:
#include <iostream>
#include "PersonList.h"

using namespace std;

int main() {

PersonList personlist;

return 0;   
}

我的编译器报错如下:
错误:"27 \PersonList.h ISO C++ forbids declaration of `Personlist' with no type"
我已经搜索了答案,但由于我是C++的新手,有点困惑,还没有找到合适的答案。如果您能为我解释一下这个错误就太好了。
3个回答

7
您的构造函数声明大小写有误。您写成了Personlist();,但应该是PersonList();。因为您的代码与类名不匹配,所以它被视为函数而不是构造函数,而函数需要一个返回类型。请注意大小写和拼写。

2
而且您还需要停止将自己的类型放在命名空间std中,这是被禁止的。 - RobH
更正:另一个错误存在,抱歉。“22 PersonList.h `Person' does not name a type”我猜这可能与原始的person类有关? - Ms01
我这么认为。你能否发布Person.h文件的内容?首先要检查Person是否与PersonList不在同一命名空间中,否则会出现问题(除非它们都在根命名空间中)。 - RobH

4
请勿将自己的类型添加到标准名称空间(std)中,而是创建自己的名称空间并在其中定义类。
//PersonList.h
namespace PersonNamespace 
{
    class PersonList 
    {
        //members here
    };
}

//Main.cpp

using namespace PersonNamespace;

实际的错误是您在Personlist中打错了字,应该是PersonList

更正:另一个错误存在,抱歉。“22 PersonList.h `Person' does not name a type”我猜这可能与原始的person类有关? - Ms01
@Als:我已经修改了,但是它报错说“Person不是一个类型”。 - Ms01
http://pastie.org/2773073 <- 我知道我在那里做了一些被禁止的事情,但如果可能的话,我宁愿不更改它,因为那样我可能还要在至少3个文件中进行更改。但是我将来肯定会记住名称空间这件事。我希望有一个解决方法。 - Ms01
@Mike:非常感谢。这一次我会把它放在那里,即使这是被禁止的(愿神惩罚我)。不过我以后再也不会这样做了。 - Ms01
@cubsink - 只需要修改三个文件就可以解决命名空间问题,这样做比养成坏习惯后再去修改要好得多。 - Talvalin
显示剩余12条评论

2
错误是因为您在声明构造函数时大小写不正确;应该是PersonList()而不是Personlist()
此外,您永远不应该在std命名空间中声明自己的类;那是为标准库保留的。您应该编写自己的命名空间名称,并将其放入其中。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接