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

C++ 指向具有显式构造函数的对象的指针,c++,pointers,constructor,explicit,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 有办法做到这一点吗?我非常感谢您的帮助。在第一种情况下,问题与构造函数是显式的这一事实无关,而是与您声明了它而没

我正在尝试做类似的事情,但我不断得到一个错误:

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

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

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

 class A {
 public:
     explicit A() { /* Or anything more meaningful than just doing nothing */ }
 };
在第二种情况下,这是行不通的。首先,因为您试图从
a
类型的对象初始化指针(即
a*
类型的变量)。第二,因为即使你做了一些更有意义的事情:

A a = A();

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

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

 class A {
 public:
     explicit A() { /* Or anything more meaningful than just doing nothing */ }
 };
在第二种情况下,这是行不通的。首先,因为您试图从
a
类型的对象初始化指针(即
a*
类型的变量)。第二,因为即使你做了一些更有意义的事情:

A a = A();

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

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

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

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

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

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

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

您的速度非常快。我以为那件事上有你。哈哈。@TylerJandreau:哈哈,只要几秒钟,你就会赢得下一个;)我只能访问头文件,这是否意味着在目标文件中没有它的实现?@user2487364:我想是的。你试过只做
A?它应该会给你同样的链接错误,因为你的速度很快。我以为那件事上有你。哈哈。@TylerJandreau:哈哈,只要几秒钟,你就会赢得下一个;)我只能访问头文件,这是否意味着在目标文件中没有它的实现?@user2487364:我想是的。你试过只做
A?它应该会给您相同的链接器错误