C++错误:成员声明末尾的预期“;”
C++ error:expected ‘;’ at end of member declaration
#include <map>
#include <memory>
#include <iostream>
using namespace std;
class test
{
public:
test(){}
~test(){}
enum type
{
error = 0
};
private:
shared_ptr<map<int, type>> member_ = make_shared<map<int, type>>();//build error
//shared_ptr<map<type, int>> member_ = make_shared<map<type, int>>();//build ok
};
int main()
{
return 0;
}
当我用"shared_ptr<map<int, type>> member_ = make_shared<map<int, type>>()"
编译程序时
main.cpp:17:63: error: expected ‘;’ at end of member declaration
shared_ptr<map<int, type>> member_ = make_shared<map<int, type>>();
^
main.cpp:17:67: error: expected unqualified-id before ‘>>’ token
shared_ptr<map<int, type>> member_ = make_shared<map<int, type>>();
^
main.cpp:17:58: error: wrong number of template arguments (1, should be at least 2)
shared_ptr<map<int, type>> member_ = make_shared<map<int, type>>();
^
In file included from /usr/include/c++/5/map:61:0,
from main.cpp:1:
/usr/include/c++/5/bits/stl_map.h:96:11: note: provided for ‘template<class _Key, class _Tp, class _Compare, class _Alloc> class std::map’
class map
^
main.cpp:17:42: error: parse error in template argument list
shared_ptr<map<int, type>> member_ = make_shared<map<int, type>>();
^
main.cpp:17:42: error: cannot resolve overloaded function ‘make_shared’ based on conversion to type ‘std::shared_ptr<std::map<int, test::type> >’
已经尝试过使用在线C++编译器编写代码,使用C++
、C++11
和C++14
兼容的编译器时遇到相同的错误,但使用兼容的编译器编译得很好C++17
。这意味着您的代码在的。然而,正如其他人所指出的,即使使用C++17
之前C++标准中是不合法C++11
和C++14
标准,该代码在其他在线编译器站点上也能很好地编译。所以我猜这些错误是由于编译器支持/不支持的功能造成的。
好吧,无论如何你都不应该像这样初始化类成员。类成员的初始化应该在类构造函数中进行,如下所示:
#include <map>
#include <memory>
#include <iostream>
using namespace std;
class test
{
public:
test() { member_ = make_shared<map<int, type>>(); }
~test() { }
enum type
{
error = 0
};
private:
shared_ptr<map<int, type>> member_;
};
int main()
{
return 0;
}
即使在在线C++编译器中,这也编译得很好,这是我们设法重现问题的唯一地方。
相关文章:
- 静态数据成员的问题-修复链接错误会导致编译器错误
- C++错误消息*成员参考.**初学者*
- C++错误C2600:无法定义编译器生成的特殊成员函数(必须首先在类中声明)
- 为什么类中的ostringstream类型的成员会导致";调用隐含删除复制构造函数";错误
- 在运算符重载定义中使用成员函数(const错误)
- 错误:请求非类类型为"MULTIMEDIA_FILME [500]"的成员|
- 使用带有 ref 参数的成员函数创建线程时出现编译错误
- 静态成员函数使用相同的名称时出现模板类型名称错误
- 为什么即使我声明了朋友类,我也会收到错误"无法访问类中声明的私人成员"
- 为什么我在空指针错误(链表)中获取成员访问权限
- WinLamb 错误:成员初始化非法
- 类成员值的合法或错误成员用法
- for 循环说 - 错误 成员引用基类型"int [13]"不是结构或联合
- C++错误:成员声明末尾的预期“;”
- C++:错误:成员访问不完整的类型,未使用的参数[-Werror,-Wunused-parameter]
- 错误:成员函数不能在其类之外声明
- 初始化 cpp 文件中的私有静态成员变量.错误:成员是私有的
- 错误:成员访问不完整类型:前向声明
- 错误:成员不可访问
- 指向基类错误成员函数的指针