你在那裏做什麼是分配,而不是初始化。初始化發生在構造函數的初始化列表,構造體之前,或在C++ 11中的初始值設定的成員變量聲明之後:
myClass.hpp,一般情況下:
/** you might want to do this if you are linking
* against the C lib or object file of that header:
*/
extern "C" {
#include fileWithStruct.h
}
class myClass
{
public:
foo bar; //no need for "struct" in C++ here
};
C++ 11:
myClass.cpp
#include "myClass.hpp"
//Initialize structure in Constrcutor
myClass::myClass()
: bar{1, 0, "someString", 0x4}
{}
Antoher選擇是提供foo的初始值與在成員變量聲明撐 - 或等於初始值設定:
myClass.hpp
extern "C" {
#include fileWithStruct.h
}
class myClass
{
public:
foo bar{1, 0, "someString", 0x4};
};
在這種情況下,需要不定義構造函數,因爲它由編譯器隱式生成(如果需要),正確初始化bar
。
C++ 03:
在初始化列表在這兒集合初始化不可用,所以你需要使用的變通辦法,如:
myClass.cpp
#include "myClass.hpp"
//Initialize structure in Constrcutor
myClass::myClass()
: bar() //initialization with 0
{
const static foo barInit = {1, 0, "someString", 0x4}; //assignment
bar = barInit;
}
或者:
#include "myClass.hpp"
namespace {
foo const& initFoo() {
const static foo f = {1, 0, "someString", 0x4};
return f;
}
}
//Initialize structure in Constrcutor
myClass::myClass()
: bar(initFoo()) //initialization
{ }
你沒有n在C++ 03或C++ 11中,只需'foo bar;'就可以了。另外,在C++ 11中,你可以在聲明處初始化'bar'。 – juanchopanza
同意,修復它的答案。這是舊的C風格結構對象聲明語法。 – legends2k
OP明確提到'foo'在C頭文件中,因此向它添加一個構造函數不是一個選項。 (請不要通過將'#ifdef __cplusplus'放入C頭來解決這個問題) –