那麼header1.hC++編譯指示與包
header2.h
#include <iostream>
struct my_struct
{
unsigned int a;
double b;
};
__forceinline void show_h(my_struct* my_struct_ptr)
{
std::cout << sizeof(my_struct) << '\t' << my_struct_ptr->b << '\n';
}
void show_cpp(my_struct*);
header2.cpp
#include "header2.h"
void show_cpp(my_struct* my_struct_ptr)
{
std::cout << sizeof(my_struct) << '\t' << my_struct_ptr->b << '\n';
}
米錯誤的值ain.cpp
#include "header1.h"
#include "header2.h"
#include <iostream>
int main()
{
my_struct my_struct;
my_struct.b = 4.56;
std::cout << sizeof(my_struct) << '\t' << my_struct.b << '\n';
show_h(&my_struct);
show_cpp(&my_struct);
return 0;
}
的main.cpp,header2.h和header2.cpp看到my_struct
不同。看起來像是在header1.h中定義的#pragma pack(4)
。爲什麼它會影響header2.h和main.cpp,但不影響header2.cpp?
輸出
12 4.56
12 4.56
16 -9.25596e+061
您已經回答了您自己的問題 - 您需要對共享相同標題的所有模塊應用相同的'pragma pack',因此請將'#include「header1.h」'添加到header2.h。 –
爲什麼你不在'header2.cpp'中包含'header1.h'?正是出於這樣的原因,通常封裝只是在結構本身的上方完成,而不是將其分開。 – legends2k
@ legends2k不,我不知道。這些完全不同的獨立項目。 – Ivars