我似乎无法使构造函数将类实例添加到向量中。这是我得到的代码:
的main.cpp
#include "object.h"
#include <iostream>
#include <vector>
vector <object> objects;
int _tmain(int argc, _TCHAR* argv[])
{
object foo(1);
objects.push_back(foo);
return 0;
}
object.h
class object {
public:
int foo;
object(int);
};
object.cpp
#include "object.h"
object (int foo) {
object::foo = foo;
}
我想将objects.push_back(foo)移动到.cpp文件中。 我尝试过使用extern并且除了一件事之外它有效:如何在构造函数中引用正在构造的对象?
提前致谢。
答案 0 :(得分:1)
首先这个
object foo();
是一个没有参数的函数声明,它返回一个int类型的对象。
其次,您的类对象没有默认构造函数。它有一个带参数的构造函数。
object(int);
因此,当您创建object类型的对象时,您应指定一个参数。
考虑到该类的定义语法无效
class object {
public:
int foo;
object(int)
}
您忘记放置两个分号:一个在rge构造函数声明之后,另一个在类定义的右括号之后。应该是
class object {
public:
int foo;
object(int);
};
构造函数也应定义为
object::object (int foo) {
object::foo = foo;
}
答案 1 :(得分:0)
哦,没关系。发现了这个问题。 管理使用关键字“this”。 我的问题是它是一个指针和我的矢量存储对象。 所以我放置了:
objects.push_back(*this);
它有效! 无论如何,谢谢,将来这可能对其他人有用。
答案 2 :(得分:0)
让我们看一下以下代码,它是您的主要代码:
class object {};
int main() {
object foo();
}
此代码在clang下编译时会报告以下内容:
foo.cc:4:15: warning: empty parentheses interpreted as a function declaration [-Wvexing-parse]
object foo();
^~
foo.cc:4:15: note: remove parentheses to declare a variable
object foo();
^~
1 warning generated.
这在C ++中称为Most Vexing Parse。
您可以通过编写:
来解决此问题int main() {
object foo;
}