Соответствующая часть моего кода выглядит следующим образом:Инициализация статического объекта класса, без нулевого аргумента конструктора C++
В 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
во время компиляции. Из того, что я понимаю, статическая инициализация ДОЛЖНА выполняться вне любой функции.
Так ли это обходное решение для этого?
Вам нужно сначала инициализировать статическую переменную без скобок или скобок. И затем назначьте ему объект, который вы хотите скопировать в основном. Извините за ответ, я не видел комментариев. – 101010
Очень похожий вопрос: http://stackoverflow.com/questions/33572283/can-i-initialize-a-static-const-member-at-run-time-in-c. –
Как я уже сказал, изначально я не использовал круглые скобки и получил вышеупомянутую ошибку. Использование инициализации скобок дает ошибку 'должно быть инициализировано конструктором, а не {...}', которому предшествует другая ошибка '' расширенные списки инициализаторов, доступные только с std = C++ 11' – Ali250