使用指向另一个对象的指针向量 class
Using vector of pointer to objects of another class
我一直在尝试执行以下操作但无济于事,
在'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(){}' 进行更改。
任何帮助将不胜感激。
您的 class 声明没有声明任何构造函数或析构函数:
class used
{
public:
int member=0;
};
但是在你的 cpp 文件中你定义了它们。你的编译器应该已经在这里抱怨了:
#include "used.h"
used::used()
{
}
used::~used()
{
}
您必须在 class:
中声明构造函数和析构函数
class used
{
public:
used();
~used();
int member=0;
};
然后这里:
my_queue.resize(6);
您实际上将创建 6 个指针,这些指针将被初始化为 nullptr
。也许您已经意识到这一点,因为您期望 my_queue[5] 到 return 0.
然后在循环中,每次执行此操作时:
my_queue.push_back(object);
您会将 my_queue
的大小增加一,从而使您的循环永远 运行。
除此之外:做。不是。做。 using namespace std;
。曾经.
我一直在尝试执行以下操作但无济于事,
在'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(){}' 进行更改。
任何帮助将不胜感激。
您的 class 声明没有声明任何构造函数或析构函数:
class used
{
public:
int member=0;
};
但是在你的 cpp 文件中你定义了它们。你的编译器应该已经在这里抱怨了:
#include "used.h"
used::used()
{
}
used::~used()
{
}
您必须在 class:
中声明构造函数和析构函数class used
{
public:
used();
~used();
int member=0;
};
然后这里:
my_queue.resize(6);
您实际上将创建 6 个指针,这些指针将被初始化为 nullptr
。也许您已经意识到这一点,因为您期望 my_queue[5] 到 return 0.
然后在循环中,每次执行此操作时:
my_queue.push_back(object);
您会将 my_queue
的大小增加一,从而使您的循环永远 运行。
除此之外:做。不是。做。 using namespace std;
。曾经.