2011-10-28 81 views
5

我有一个类将处理我之前创建的另一个类的对象数组(它工作正常)。当我尝试创建List-class的对象时出现问题。解释错误:ISO C++禁止声明没有类型的'Personlist'

这是列表类的头:

#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; 
} 

我的编译器是给我的错误是:

error: "27 \PersonList.h ISO C++ forbids declaration of `Personlist' with no type"

我已经搜索了答案,但由于我对C++很陌生,这有点令人困惑,我还没有找到任何拟合然而。如果你能为我解释这个错误真是太好了。

回答

7

你有错大写你的构造函数声明。您有Personlist();,但需要PersonList();。因为你所拥有的不等于类名,所以它被认为是一个函数而不是一个构造函数,而一个函数需要一个返回类型。

+2

而且你还需要停止把你自己的类型放在命名空间标准,这是禁止的。 – RobH

+0

谢谢指出:),但错误仍然存​​在 – Ms01

+0

更正:另一个错误存在,对不起。 “22 PersonList.h'Person'没有命名类型”我想这可能与原始人类有关? – Ms01

4

请勿将添加到标准名称空间(std)中,而是创建自己的名称空间并在其中定义您的类。

//PersonList.h

namespace PersonNamespace 
{ 
    class PersonList 
    { 
     //members here 
    }; 
} 

//Main.cpp

using namespace PersonNamespace; 

实际的错误是,你在做Personlist一个错字,而不是PersonList

+0

所以,你的意思是我应该做类似这样的事情:namespace x {class bla bla} .... then using namespace x; ? – Ms01

+0

@cubsink:是的。请查看更新后的答案。 –

+0

很好的建议,但是这并不能解决这个错误。 –

2

错误是因为您在声明构造函数时大写错误;它应该是PersonList()而不是Personlist()

此外,您不应该在std命名空间中声明自己的类;这是为标准库保留的。你应该制作你自己的命名空间名称,然后把你的东西放在里面。

相关问题