【问题标题】:Declaring and using a static list in order to print objects (in c++)声明和使用静态列表以打印对象(在 C++ 中)
【发布时间】:2017-05-16 11:52:34
【问题描述】:

我有一个名为 Person 的类,它包含一个头文件和一个 cpp 文件。 我试图在头文件中声明一个静态列表,如下所示:

 static list<Person*> group;

(我已经在 cpp 和头文件中包含了列表)。 我尝试在 cpp 文件中编写打印函数:

 void Person::PrintAll() const {
 int counter=0;
 list<Person>::iterator i;
 **for ( i= group.begin(); i != group.end(); ++i)**{
     cout << *i << endl;
     counter++;
 }

但是我在“for”行(被标记的那一行)中有很多错误。 我也尝试在 cpp 文件中声明静态列表,但我得到了同样的错误。 我做错了什么?非常感谢

【问题讨论】:

  • list&lt;Person*&gt;list&lt;Person&gt;。注意*
  • 感谢您的快速回复。不幸的是它仍然不起作用。我认为该列表不知何故无法识别。我尝试执行此操作: group.push_front(x);我得到这个错误:undefined reference to Person::group 也许我没有以一种好的方式去标化/初始化列表?谢谢
  • 如何初始化cpp文件中的列表?
  • 我读你的文字好像 group 是一个全局变量?既然你在谈论是否可以在CPP中声明它?如果是这样的话,请问您为什么不简单地将其设为类属性?也就是说,您是否尝试过以另一种方式访问​​它?像 cout
  • 是的,person 有一个有效的 ofstream 运算符。我不再收到那个错误,但是当我厌倦了主要这样做时:Person :: PrintAll()我得到了这些错误:-无效的参数'候选人是:void printAll()'-无法调用成员函数'void Person: :printAll() const' without object 你知道为什么会这样吗?

标签: c++


【解决方案1】:

list&lt;Person&gt;::iterator i 不是迭代 list&lt;Person*&gt; 的迭代器。

你的类型应该是Person*

因为group是全局变量(作者在cmets中提到),所以有两种变体:

声明:

.h:

extern std::list<Person*> group;

cpp:

std::list<Person*> group;

那么就可以跨多个cpp文件使用它了。

或者如果你只想在一个cpp文件中使用,那么根本不要在header中声明,在cpp文件中声明为static:

cpp:

static std::list<Person*> group;

【讨论】:

  • 感谢您的快速回复。不幸的是它仍然不起作用。我认为该列表不知何故无法识别。我尝试执行此操作: group.push_front(x);我得到这个错误:undefined reference to Person::group 也许我没有以一种好的方式去标化/初始化列表?谢谢
  • 打印哪个错误?也许你忘了在 cpp 单元中初始化这个静态类变量?
  • 我在 cpp 文件的头文件中都这样做了:#include using namespace std;然后我写了这个:静态列表 group;(就在“使用命名空间std:”行下方)当我尝试执行此操作时:group.push_front(x)我得到“对Person的未定义引用::组(并且仍然在 PrintAll 函数中出现错误)
  • 也许我没有以正确的方式初始化静态列表? (在 cpp 中)
  • 我根据事实更新了答案,group 是全局变量。鉴于此,这个问题与stackoverflow.com/questions/1856599/… 重复
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-09-30
  • 1970-01-01
  • 2019-04-26
  • 2013-10-14
  • 1970-01-01
相关资源
最近更新 更多