【发布时间】:2014-05-29 01:22:30
【问题描述】:
摘自《The C++ Programming Language, 4th edition》一书, 第 489 页的“17.3.1 没有构造函数的初始化”部分
书中示例中的标记行无法编译并出现此错误 -
$ g++ -std=c++11 ch17_pg489.cpp
ch17_pg489.cpp: In function 'int main()':
ch17_pg489.cpp:32:34: error: could not convert 's9' from 'Work' to 'std::string {aka std::basic_string<char>}'
Work currently_playing { s9 }; // copy initialization
我有 Cygwin
$ g++ --version
g++.exe (tdm64-2) 4.8.1
引用上述部分的文字,
we can initialize objects of a class for which we have not defined a constructor using
• memberwise initialization,
• copy initialization, or
• default initialization (without an initializer or with an empty initializer list).
#include <iostream>
struct Work {
std::string author;
std::string name;
int year;
};
int main() {
Work s9 { "Beethoven",
"Symphony No. 9 in D minor, Op. 125; Choral",
1824
}; //memberwise initialization
/*
// This correctly prints the respective fields
std::cout << s9.author << " | "
<< s9.name << " | "
<< s9.year << std::endl;
*/
// Fails to compile
Work currently_playing { s9 }; // copy initialization
Work none {}; // default initialization
return 0;
}
根据我的理解,复制初始化将由编译器生成的默认复制构造函数提供,或者它只是一个成员明智的复制(将一个结构分配给另一个,如在 C 中)。所以程序应该已经编译到这里了。
或者这是编译器的怪癖??
有什么解释吗?
【问题讨论】:
标签: c++ compilation compiler-errors initialization