[英]undeclared identifier in C++ Visual Studio 2008
我在Visual Studio 2008中有一個C ++項目。
在項目中,我有幾種形式和幾種非形式類。 一個非形式的專門稱為Import_LP.h,它是一個具有多個方法的類,所有這些方法都寫在頭文件中,資源文件中沒有任何內容。
我在任何表單類中使用#include Import_LP都沒有問題,並且創建對象並引用它的任何方法,但是我嘗試#include它的任何其他類,它給了我一個
syntax error : undeclared identifier 'Import_LP'
在它被引用的行上發生,即Import_LP ^ importLP;
我來自java / c#背景,這里有鏈接嗎?
我能夠通過隨機機會解決問題。
那么顯然你不能有兩個文件包含對方?
我在做
#include Window.h
在Import_LP.h中
和
#include Import_LP.h
在Window.h中。
如果有人能向我解釋為什么你不能這樣做,我將不勝感激。
如果你有包含警衛,它是這樣的:預處理器包括Import_LP.h,它說“只包括我一次”,然后包括Window.h,它試圖包含Import_LP.h,但不包括因為包含保護。 所以Window.h開始解析窗口類,但是因為Import_LP.h類頭尚未完全加載而失敗。
解決方案是預先聲明類:
在window.h:
#ifndef WINDOW_H //works best if this is first
#define WINDOW_H
#pramga once
class Import_LP;
class Window {
Import_LP* member; //member has to be a pointer
void func();
};
#include "Import_LP.h"
inline void Window::func() {
}
#endif WINDOW_H
Import_LP.h:
#ifndef IMPORT_LP_H //works best if this is first
#define IMPORT_LP_H
#pramga once
class Window;
class Import_LP {
void func(Window& parent); //parameter has to be a pointer or reference
};
#include "Window.h"
inline void Import_LP::func(Window* parent) {
}
#endif IMPORT_LP_H
這只允許您通過指針或引用引用另一個,直到實際包含,但這應該是可行的。 從技術上講,您只需要對一個或其他標題執行此操作。
聽起來像Import_LP類型未定義,你的挑戰是找出原因。 首先要做的是閱讀import_LP.h的內容並弄清楚如何聲明Import_LP。 一種可能的方法是打開一個好的文件,右鍵單擊Import_LP的使用並選擇“Go To Declaration”。 這應該將重點轉移到適用於該特定情況的Import_LP聲明。
它可能是聲明被#ifdef包圍,以某種方式阻止它在您的其他文件中編譯。 或者它可能是其他東西,我們沒有足夠的細節可以使用。
更新:
那么顯然你不能有兩個文件包含對方? 。 。 。 如果有人能向我解釋為什么你不能這樣做,我將不勝感激。
當你這樣做時,你最終可以多次定義類型和變量。
有一些技術,比如#include guard和#pragma ,可以用來緩解這些問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.