簡體   English   中英

C ++ Visual Studio 2008中未聲明的標識符

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM