我正在尝试创建Contact的对象。但我无法用初始化列表做到这一点。当我删除新的内部Contact类构造函数时,它工作正常但是当我添加new时,编译器会抛出错误。我想了解为什么我无法使用初始化列表。我在哪里可以使用初始化列表,哪里不可以?
#include"stdafx.h"
#include<string>
using namespace std;
struct Address
{
string street;
string city;
};
struct Contact
{
string name;
Address* address;
Contact(const Contact& other)
: name{other.name},
address( new Address(*other.address) ) {}
~Contact()
{
//delete work_address;
}
};
int main()
{
auto address = new Address{ "123 East Dr", "London" };
//Issue while creating john and jane below
//Compiler error: Cannot initialize john with initializer list
Contact john{ "John Doe", address };
Contact jane{ "Jane Doe", address };
delete address;
getchar();
return;
}
答案 0 :(得分:0)
联系类构造函数,它工作正常,但是当我添加new时,编译器会抛出错误。
你很可能意味着&#34;在我添加了复制构造函数后,编译器会抛出错误&#34;。
使用
Contact(const Contact& other)
: name{other.name},
address( Address(*other.address) ) {} // Without the new
显然是错的。您无法使用对象初始化指针。
您可以使用:
Contact john{"John Doe", address};
仅限于:
由于在添加复制构造函数后这两者都不成立,编译器会正确地将其指出为错误。
您可以通过添加另一个用户定义的构造函数来解决这个问题:
Contact(string const& n, Address* a) : name(n), address(a) {}
<强> N.B。强>
请注意,您需要关注The Rule of Three课程。否则,您将在运行时遇到问题。
<强> N.B。 2 强>
在main
中,您有
return;
这是不正确的。您应该删除该行或将其更改为
return 0;