2012-02-03 69 views
7

我有一個Eclipse Indigo的問題,抱怨類的方法無法解析,但無論如何編譯並正常工作(AFAIK)。這是一個非常簡單的程序。這裏是Population.cpp:Eclipse方法無法在簡單程序中解決C++

#include <stdlib.h> 
#include <iostream> 
#include <time.h> 
#include "Population.h" 

Population::Population() { 
    // TODO Auto-generated constructor stub 

} 

Population::~Population() { 
    // TODO Auto-generated destructor stub 
} 

void Population::initializePop(int numBits, int N) { 

    srand((unsigned)time(0)); 
    for(int i=0; i<N; i++) { 
     x[i] = (char*) calloc(numBits, sizeof(char)); 
     for(int j=0; j<numBits; j++) { 
      if(rand() < 0.5) 
       x[i][j] = 0; 
      else 
       x[i][j] = 1; 
     } 
    } 

} 

char** Population::getX() { 
    return x; 
} 

void Population::printStuff() { 
    std::cout << "Whatever"; 
} 

現在,我建立的代碼,一切都很好。在Eclipse中的另一個項目,我打電話這段代碼是這樣的:

#include <typeinfo> 
#include <string.h> 
#include <iostream> 
#include "cute.h" 
#include "ide_listener.h" 
#include "cute_runner.h" 
#include "Population.cpp" 

void testPopulationGeneration() { 
    Population* p = new Population; 
    int N = 10; 
    int bits = 4; 
    char** pop; 

    ASSERTM("Population variable improperly initialized", dynamic_cast<Population*>(p)); 

    std::cout << p->printStuff(); 
    std::cout << "Ok..."; 
    p->initializePop(bits, N); 

    pop = p->getX(); 
    ASSERTM("Pop not correct size.", sizeof(pop) == 10); 
} 

正如你看到的,我也運行TDD可愛的插件在C++中。當我將p聲明爲類型Population並且第一個斷言通過時,它不會抱怨。我對C++有點新鮮,但確實要將Population.cpp所在的項目添加到測試項目的包含路徑中。

這不是一個大問題,因爲它不會影響任何對我來說很明顯的事情,但它仍然非常煩人。我沒有看到它應該這樣做的情況。

感謝您的幫助!

回答

3

sizeof(pointer)返回指針的大小(在32位系統上是4,在64位上是8),而不是它指向的大小!在類中保存維度,並添加一個函數來返回它們。

另外,initializePop不應該分配實際的X數組嗎?

X = calloc(N, sizeof(char *)); 

或者說,你應該因爲你使用的是C++使用new用於分配:

X = new char* [N]; 

及更高版本:

X[i] = new char [numbits]; 
+0

謝謝你的提示!它沒有回答這個問題,但是提示的大小幫助我解決了問題。我想我一直在使用高級語言太久了。像這樣的基礎上生鏽了一點。它幾乎看起來像是一個黑客,只是將大小和數組本身一起存儲,但我猜如果數組的大小將作爲命令行輸入,那麼在C++中沒有更好的方法。 – 2012-02-03 16:33:23

10

這可能是與外部#include標題索引問題未找到。按照下面的步驟,並看看是否有幫助:

  1. 轉到每個自定義#include(例如"cute.h"),並按下 F3(即「顯示宣言」);看看它是否能夠訪問該文件 ;如果不在一些記事本上覆制這些文件
  2. 如果該文件不可訪問,請在您的 目錄結構中找到它的路徑;例如「cute.h」和「啊」位於, 「C://Eclipse/MyWork/Workspace/Project/include_1」和 「ide_listener.h」位於 在「C://Eclipse/MyWork/Workspace/Project/include_2」,然後在記事本的一些
  3. 在Eclipse中去複製兩個 的文件夾路徑Project -> Properties -> C/C++ General -> Paths and Sybmols;你會看到幾個標籤Includes, Sybmols,Library Paths ...
  4. 單擊Library Paths -> Add -> Workspace... -> <locate the above folder paths>並按確定
  5. 讓索引器重建;現在再次按照步驟(1);希望 文件應該可以訪問
  6. 對於較大的文件未來的安全,去Window -> Preferences -> C/C++ -> Editor -> Scalability -> "Enable scalability mode when ..."和行數設置爲一些大的數字,如 500000,然後按「確定」;

需要最後一步,因爲當你的文件增長的行數,如果超過上述數量,然後Eclipse將停止顯示一些「可擴展性」的原因定義,即使它會索引。

+0

我試過了所有的包含,Eclipse可以找到所有的源代碼,所以這似乎不是我的問題。 – 2012-02-03 16:34:35

+0

我在ADT上的路徑和符號下看不到「庫路徑」。任何人都知道這是現在搬到哪裏?謝謝。 – inder 2014-07-07 17:34:48

+0

@inder,你的意思是'Windows>首選項>調試/發佈>源查找路徑? – iammilind 2014-07-08 12:44:33

19

試試這個:

在項目資源管理器窗口中,右鍵點擊你的項目 - >首頁 - >重建

相關問題