类构造函数引用self来添加到vector

时间:2014-02-01 15:49:50

标签: c++

我似乎无法使构造函数将类实例添加到向量中。这是我得到的代码:

的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并且除了一件事之外它有效:如何在构造函数中引用正在构造的对象?

提前致谢。

3 个答案:

答案 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;
}