non-static data member initializers only available with -std=c++11 or -std=gnu++11
时间: 2024-10-17 14:10:35 浏览: 5
"non-static data member initializers only available with -std=c++11 or -std=gnu++11" 这句话是在说,在C++11及更高版本的标准中(包括GNU C++标准库的相应版本),非静态数据成员(即在类体中定义而不是在构造函数中初始化的数据成员)的初始值可以在类定义时直接指定,这是一个新特性。在C++11之前,如果你想要在类定义中直接给非静态数据成员赋初值,你需要使用默认构造函数或者在构造函数中进行初始化。
例如,你可以这样做:
```cpp
class MyClass {
public:
std::string name = "Default Name"; // C++11及以上可用
private:
int value = 0; // 同样在C++11及以上可用
};
```
如果没有启用C++11或更高版本的标准,上述代码会报错,因为编译器不知道如何处理这样的初始化。为了使用这个特性,你需要在编译命令行上加入相应的选项 `-std=c++11` 或 `-std=gnu++11` 来告诉编译器你正在使用C++11或更新的标准。
相关问题
40 14 C:\Users\陈春夏\AppData\Local\Temp\360zip$Temp\360$6\Untitled3.cpp [Warning] non-static data member initializers only available with -std=c++11 or -std=gnu++11
这是一个编译器的警告信息,意思是非静态数据成员的初始化只在使用了 C++11 或者 GNU C++11 标准时才可用。这个警告的原因是因为在早期的 C++ 标准中,非静态数据成员的初始化只能在类的构造函数中进行,而 C++11 标准中允许在声明时直接初始化非静态数据成员。如果你想使用这个特性,可以在编译器选项中加入 -std=c++11 或者 -std=gnu++11。
ubuntu16.04ros编译时报错home/bobac3/ros_workspace/src/multipoint_navigation/src/multipoint_nav.cpp:20:17: warning: non-static data member initializers only available with -std=c++11 or -std=gnu++11 int cycle = 1; //巡航次数 ^ /home/bobac3/ros_workspace/src/multipoint_navigation/src/multipoint_nav.cpp: In member function ‘void Multipoint_Nav::move()’: /home/bobac3/ros_workspace/src/multipoint_navigation/src/multipoint_nav.cpp:90:26: error: ‘goal’ does not name a type for(auto goal:pose) //遍历导航点列表 ^ In file included from /opt/ros/kinetic/include/ros/ros.h:40:0, from /opt/ros/kinetic/include/actionlib/client/simple_action_client.h:45, from /home/bobac3/ros_workspace/src/multipoint_navigation/src/multipoint_nav.cpp:1: /opt/ros/kinetic/include/ros/console.h:373:3: error: expected ‘;’ before ‘do’ do \ ^ /opt/ros/kinetic/include/ros/console.h:561:35: note: in expansion of macro ‘ROS_LOG_COND’ #define ROS_LOG(level, name, ...) ROS_LOG_COND(true, level, name, __VA_ARGS__) ^ /opt/ros/kinetic/include/rosconsole/macros_generated.h:110:23: note: in expansion of macro ‘ROS_LOG’ #define ROS_INFO(...) ROS_LOG(::ros::console::levels::Info, ROSCONSOLE_DEFAULT_ ^ /home/bobac3/ros_workspace/src/multipoint_navigation/src/multipoint_nav.cpp:152:17: note: in expansion of macro ‘ROS_INFO’ ROS_INFO("------------------loop ( %d ) termination!----------- ^ /opt/ros/kinetic/include/ros/console.h:373:3: error: expected primary-expression before ‘do’ do \ ^ /opt/ros/kinetic/include/ros/console.h:561:35: note: in expansion of macro ‘ROS_LOG_COND’ #define ROS_LOG(level, name, ...) ROS_LOG_COND(true, level, name, __VA_ARGS__) ^ /opt/ros/kinetic/include/rosconsole/macros_generated.h:110:23: note: in expansion of macro ‘ROS_LOG’ #define ROS_INFO(...) ROS_LOG(::ros::console::levels::Info, ROSCONSOLE_DEFAULT_
这个错误的原因是代码中使用了 C++11 的特性,但是编译时没有开启 C++11 标准。你需要在编译时加上选项 -std=c++11 或者 -std=gnu++11 来开启 C++11 标准。
具体来说,在你的 CMakeLists.txt 文件中添加以下行:
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
这将会把 C++11 标准的编译选项加入到编译命令中,从而解决这个问题。
另外,还有一个错误是 'goal' does not name a type,这可能是因为你没有在代码中定义 goal 变量的类型。你需要检查一下代码中是否有定义 goal 变量的类型,并且确保它在使用之前已经被定义。
阅读全文