1

我正在尝试做这样的事情,但我不断收到错误消息:

class A {
public:
    explicit A();
}

A * a = new A(); //results in:  undefined reference to A()

我也试过:

A * a = A(); //results in cannot convert A to A * in assignment

有没有办法做到这一点?我将非常感谢您的帮助。

4

2 回答 2

1

在第一种情况下,问题与构造函数是 的事实无关explicit,而与您已声明它但未定义它的事实有关。您得到的是来自链接器的错误,而不是来自编译器的错误。尝试这个:

 class A {
 public:
     explicit A() { /* Or anything more meaningful than just doing nothing */ }
 };

在第二种情况下,这是行不通的。首先,因为您正试图A*从 type 的对象初始化指针(即 type 的变量)A。其次,因为即使你做了更有意义的事情:

A a = A();

这不会编译,因为explicit不考虑构造函数进行复制初始化=(使用符号的初始化形式)。

于 2013-06-14T19:39:45.733 回答
0

您没有提供构造函数的主体。尝试:

class A {
public:
    explicit A() {}
}

explicit关键字只是意味着它阻止类型转换,这就是第二个错误所说的。

于 2013-06-14T19:40:01.943 回答