2015-12-03 20 views
0

如果這是一個重複的問題,請道歉。我徹底搜索並找不到答案。C++:Eclipse無法解析從本地類的導入

我在同一個目錄中有2個C++ .h文件。其中一個類從另一個類繼承,但Eclipse無法解析基類的符號。在整個項目中發生類似的錯誤;但基類似乎可以從其他目錄中解析,而派生類無法解析位於同一目錄中的基類。爲了澄清,我有以下目錄結構:

src  
    dir 
     classA.h 
     classB.h 
    otherDir 
     classC.h 
     classD.h 

classA.h看起來是這樣的:

#ifndef OTHERDIR_A_H 
#define OTHERDIR_A_H 
class A { 
    // A definition 
}; 
#endif 

classB.h看起來是這樣的:

#ifndef OTHERDIR_B_H 
#define OTHERDIR_B_H 
class B : public A { // Symbol 'A' could not be resolved 
    // B definition 
}; 
#endif 

classC.h樣子這個:

#include "D.h" 
#include <sstream> 
#include <string> 
#include <set> 
using std::cout; // resolves correctly 
using dir::A; // resolves correctly 
using dir::B; // Symbol 'B' could not be resolved 
class C : public D { /* C definition */ }; 

我覺得我有一個Eclipse配置問題,因爲當我在命令行中運行Make時,它會編譯。這裏是Makefile中:

SRC=../../src 
CPPFLAGS = -I$(SRC) 
CXX = g++ 
CXXFLAGS = \ 
    -g -std=c++11 \ 
    -Wall \ 
    -Wno-unused-function 

client1: always 
     $(CXX) $(CPPFLAGS) $(CXXFLAGS) -o client1 $(SRC)/otherDir/client1.cxx 

clean: 
     rm -f client1 *.o *~ 

always: 

在屬性 - > C/C++編譯 - >工具鏈編輯器,我有 「當前工具鏈:沒有工具鏈」。但是,下拉菜單中的唯一選項是「No ToolChain」,所以我不能選擇另一個工具鏈。我一直無法找到如何在OSX上安裝或添加工具鏈到Eclipse。我相信我已經安裝了XCode工具鏈。

關於如何解決本地進口的任何建議?謝謝!

+1

你在代碼中包含頭文件嗎? –

+0

哦,我認爲你認爲using語句和它實際做的有些不同。你從這裏獲得了意義(6):http://en.cppreference.com/w/cpp/language/namespace。你似乎期望它像在C#中使用'或在java中'導入'。 –

+0

James,我沒有在classB.h中使用「#include classA」,原因有兩個。首先,classA和classB是我不打算修改的作業的起始代碼。其次,包括「#include classA」不能解決解決問題。 我相信這對我的代碼實際上不是問題,因爲代碼使用Make編譯得很好。 classC.h中的「using」語句也是入門代碼的一部分。可能他們會工作,如果classB實際編譯在第一位(請記住「使用dir :: A」也適用於ClassC) –

回答

0

在某種情況下,我添加了otherDir::,其中otherDir的內容未解決。 (例如,將public A更改爲public otherDir::A)。這已經修復了大部分錯誤,並且使eclipse可用,儘管還有其他一些未解決的方法。

+0

如果這是文件的完整內容,則A和B實際上不在命名空間中。 client1.cxx的包含順序可能與某些方面有關。您的目錄結構對代碼沒有影響。 '使用dir :: A;'只表示「當我說'A'時,我可能是'dir :: A'」,而不是「A在目錄'dir'下的某個文件中定義的」 –

相關問題