使用指向另一个类的对象的向量

时间:2018-04-06 23:12:45

标签: oop c++11 pointers vector deque

我一直试图做以下事情无济于事,

在'used.h'中,

#ifndef USED_H_
#define USED_H_
#include<iostream>
#include<string>
    class used
    {
    public:
      int member=0;
      used();
      virtual ~used();
    };
#endif

在used.cc中,

#include "used.h"
used::used()
{
}
used::~used()
{
}

在'the_user.h'中,

#ifndef THE_USER_H_
#define THE_USER_H_
#include<queue>
#include<iostream>
    class used;      //Class forward declaring
    class the_user
    {
    public:
      std::deque<used*> my_queue;
      the_user();
      ~the_user();
    };
#endif

现在,我想访问并更改'the_user.cc'中的'member',

    #include "used.h"
    #include "the_used.h"
    #include<iostream>
    #include<queue>
    using namespace std;
    the_user::the_user()
    {
        deque <used*> my_queue;
        my_queue.resize(6);
        used* object = new used;       <-------marked line
        for(unsigned int i=0; i<my_queue.size(); i++)
        {
           my_queue.push_back(object);
        }

        cout << my_queue[5] << endl;                     //Should give 0
        my_queue[0]->member=1000;
        cout << my_queue[0]->member << endl;             //1000
    }
主文件中的

(我只有读访问权限),

#include "the_used.h"
#include <iostream>
#include <stdlib.h>
#include <sstream>
using namespace std;
int main()
{
  the_used *object = new the_used();
}

实际上,我在标记的行处获得了undefined reference to used::used()。什么似乎是问题? 我也尝试过使用相同的矢量,但无济于事。 我不允许对'int main(){}'进行更改。 任何帮助都将受到高度赞赏。

1 个答案:

答案 0 :(得分:0)

您的类声明不声明任何构造函数或析构函数:

class used
{
public:
    int member=0;
};

但是在你的cpp文件中你定义它们。你的编译器应该在这里抱怨:

#include "used.h"
used::used()
{
}

used::~used()
{
}

您必须在类中声明构造函数和析构函数:

class used
{
public:
    used();
    ~used();
    int member=0;
};

然后在这里:

my_queue.resize(6);

您实际上会创建6个指针,这些指针将初始化为nullptr。也许你知道这一点,因为你希望my_queue [5]返回0。

然后在你的循环中,每次你这样做:

my_queue.push_back(object);

您将my_queue的大小增加1,从而使您的循环永久运行。

除此之外:做。不。做。 using namespace std;。如初。