指向具有显式构造函数的对象的指针

时间:2013-06-14 19:36:54

标签: c++ pointers constructor explicit

我正在尝试做这样的事情并且我一直收到错误:

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

有办法做到这一点吗?我非常感谢你的帮助。

2 个答案:

答案 0 :(得分:1)

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

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

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

A a = A();

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

答案 1 :(得分:0)

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

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

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