【发布时间】:2015-11-18 22:19:45
【问题描述】:
我的代码相关部分如下:
在 foo.h 中:
namespace foo_ns {
class Foo
{
static Class1 object1;
};
}
在 foo.cpp 中
#include <foo.h>
namespace foo_ns {
Class1 Foo::object1(/*another object. Need to call copy constructor*/)
}
这里,“另一个对象”在main() 中定义。此外,Class1 是大型库的一部分,并且没有零参数构造函数,因此在编译期间只需删除括号就会产生no matching function call 错误。据我了解,静态初始化必须在任何函数之外执行。
那么有什么解决方法吗?
【问题讨论】:
-
您需要先初始化不带括号或大括号的静态变量。然后将要在 main 中复制的对象分配给它。抱歉,我没有看到 cmets 的答案。
-
一个非常相似的问题:stackoverflow.com/questions/33572283/….
-
正如我所说,我最初没有使用括号并得到上述错误。使用大括号初始化会导致错误
must be initialized by constructor, not by {...}前面有另一个错误extended initializer lists only available with std=c++11 -
@Ali250 你不使用 C++11 有充分的理由吗?
-
@M.M 长话短说,我正在使用一个名为
catkin的构建系统,它用于机器人操作系统 (ROS)。官方说,ROS 仍然在 C++03 上,我正在使用许多用 C++03 编写的库,论坛上的人们通常说混合 c++03 和 c++11 代码不是一个好主意。
标签: c++ static initialization copy-constructor