我工作的一個項目,我需要的結構如下: 如何使用的#ifndef的#define #ENDIF正確的C++
的2個CPP文件包含類,這些類必須是在赤裸裸的功能H文件1.類和nakeds需要H文件2中的變量。
我可以拆分CPP文件,以便它們使用2個單獨的文件,它們包含海綿和它們需要的變量。但我更喜歡使用這種結構。
它看起來像編譯器跳過的#ifndef命令,我提出該問題的測試:
主要:
#include <iostream>
//1>CPPFile2.obj : error LNK2005: "bool Test1" ([email protected]@3_NA) already defined in CPPFile1.obj
//1>CPPFile2.obj : error LNK2005: "bool Test2" ([email protected]@3_NA) already defined in CPPFile1.obj
int main()
{
}
CPPFile 1:
#include <iostream>
using namespace std;
#include "HFile1.h"
CPPFile 2:
#include <iostream>
using namespace std;
#include "HFile2.h"
HFILE 1:
#include "HFile2.h"
#pragma once
#ifndef Name1
#define Name1
//Use test1, this workes fine
//Use test2, this workes fine
#endif
HFILE 2:
#pragma once
#ifndef Name2
#define Name2
bool Test1 = false;
bool Test2 = false;
#endif
這怎麼可能是的#ifndef的#define #ENDIF結構不能正常工作?
通常你不會需要將這些包括警衛,因爲你已經有#pragma一次。 –
我在#pragma一次不支持的情況下添加了它們,但沒有2中的其中一個仍不起作用。 – Laurence
您違反了一個定義規則。您需要使'Test1'和'Test2'爲'static'或'extern'。 – jrok