0
好吧,所以我遇到了Visual Studio C++(C++/CLI)中的Forward Declarations問題。 的代碼如下:Visual C++(C++/CLI)使用派生類的前向聲明?
啊
#include "B.h"
#ifdef B_H
#pragma once
public ref class A : public base_class //base_class is public, memory managed
{
B^ b;
}
#endif
了Bh
#define B_H
#pragma once
ref class A;
ref class B
{
A^ a;
}
#include "A.h"
的的#ifdef /#編譯後衛應該保持從被讀取兩次保持* .h和強迫BH先被讀取,然後從編譯器輸出我很確定他們是。 (我甚至不知道#pragma一次和#include的位置需要#ifdef/#define)
但是,編譯器抱怨path/a.h:錯誤C2011:'class'類型重定義。 請參閱文件路徑/ B.h
我應該對A的前向聲明做些什麼,因爲它是實際類定義中的派生類,還是我在咆哮錯誤的樹?需要
通過在#ifdef之外移動一次#pragma如果Ah先被預處理,則未定義A。 另外,我需要使用.cpp文件中引用的方法,所以我需要#include .h文件中的某處,但使用第二種方法並在.h的作品底部添加#include! 謝謝! –
爲了解決這個問題,我建議你從頭文件底部刪除#include,並簡單地從你的.cpp文件中包含A.h和B.h。 –
是不是把#include放在.cpp文件中不好的做法? (不是說預處理完畢後,所有東西都沒有混合在一起) –