不能在c ++中定义main中的结构。
#include <iostream>
using namespace std;
int main()
{
struct d
{
char name[20];
int age;
};
struct d s,f;
s = { "agent smith" , 17 };
cout << s.name << " is 17 year old\n";
return 0;
}
每当我编译我的代码时,我得到以下错误: -
$ g++ test.cpp
test.cpp: In function ‘int main()’:
test.cpp:25:27: error: no match for ‘operator=’ (operand types are ‘main()::d’ and ‘<brace-enclosed initializer list>’)
s = { "agent smith" , 17 };
^
test.cpp:18:9: note: candidate: constexpr main()::d& main()::d::operator=(const main()::d&)
struct d
^
test.cpp:18:9: note: no known conversion for argument 1 from ‘<brace-enclosed initializer list>’ to ‘const main()::d&’
test.cpp:18:9: note: candidate: constexpr main()::d& main()::d::operator=(main()::d&&)
test.cpp:18:9: note: no known conversion for argument 1 from ‘<brace-enclosed initializer list>’ to ‘main()::d&&’
我的代码有什么问题?我正如书中所说(c ++ primer Plus 6thED)
答案 0 :(得分:1)
尝试显式构造函数:
s = d{ "agent smith" , 17 };
或使用显式initialization
进行定义d s{"agent smith", 17};
(假设C++11,所以GCC - 至少GCC 6-编译with g++ -std=c++11 -Wall -Wextra -g
)
PS。不要学习比C ++更老的东西11。请注意,C ++ 17最近已经approved(2017年9月),但今天太年轻,无法实现成熟的实现。
答案 1 :(得分:1)
我认为您的问题在于您尝试使用初始化列表&#39;进行初始化。在你已经定义了变量之后。
这应该有效:
d s = { "agent smith", 17 };
d f = { "agent john", 19 };
答案 2 :(得分:-1)
该计划的工作版本:
{}
时)使用-std=c++11
编译选项->
来调用结构字段delete s
)string
表示字符串字段或适当使用char
数组(&#34;某些内容&#34;是字符串)
#include <iostream>
#include <string>
using namespace std;
struct d
{
string name;
int age;
};
int main()
{
d *s = new d{ "agent smith" , 17 };
cout << s->name << " is 17 year old\n";
delete s;
return 0;
}