2015-11-10 88 views
0

我正在爲此工作幾小時,我相信我忽略了某些內容。我是C++和編程的新手。 我試圖建立一個由多個.cpp文件組成的程序。關聯的頭文件位於include目錄中。我當然也告訴netbeans在哪裏搜索它們(Project >> Properties >> build >> C++ - Compiler >> include directories)。在G ++中使用Netbeans(C++)時未定義的引用錯誤

這是最主要的文件:

//main.cpp 

#include "Eingabe_Konstanten.h" 
#include "Stoffwerte.h" 
#include "Zustandsgroessen.h" 
#include <iostream> 

using namespace std; 

int main() 
{ 
    Eingabe_Konstanten ein; 
    cout << ein.Pi(); 
    cin.get(); 
} 

這就是相關headerfile 「Eingabe_Konstanten.h」(對不起,這是部分德國...;))

//Eingabe_Konstanten.h 

#ifndef EINGABE_KONSTANTEN_H 
#define EINGABE_KONSTANTEN_H 

class Eingabe_Konstanten { 
public: 
    double Pi(); 
    double mStrom(); 
}; 

#endif /* EINGABE_KONSTANTEN_H */ 

有了相應。 cpp-file

//Eingabe_Konstanten.cpp 

#include "Eingabe_Konstanten.h" 
#include "InputOutput.h" 
#include <string> 

InputOutput io; 

double Pi() 
{ 
    double pi = M_PI; 
    return pi; 
} 

double mStrom() 
{ 
    double m = io.lese(7); 
    return m; 
} 

lese()是從文件中讀取行的方法。它在InputOutput類中。

//InputOutput.h 

#ifndef INPUTOUTPUT_H 
#define INPUTOUTPUT_H 
#include <string> 

class InputOutput { 
public: 
    double lese(int); 
}; 

#endif /* INPUTOUTPUT_H */ 

************************************* 

//InputOutput.cpp 

#include "InputOutput.h" 
#include <iostream> 
#include <string> 
#include <sstream> 
#include <limits> 
#include <fstream> 
#include <stdlib.h> 

using namespace std; 

double lese(int zeile) 
{ 
    ifstream datei("input.txt"); 
    if(!datei.is_open()) 
    { 
     cerr << "Fehler beim Oeffnen der Datei" << endl; 
     return 0; 
    } 
    for(; zeile > 1; --zeile) 
     datei.ignore(numeric_limits<streamsize>::max(), '\n'); 
     string input; 
    if(!getline(datei, input)) 
    { 
     cerr << "Fehler beim Lesen aus der Datei" << endl; 
     return 0; 
    } 
     double wert = atof(input.c_str()); 
    return wert; 
} 

我認爲這是一個鏈接問題。因爲目標文件似乎沒有正確鏈接在一起,並且編譯器在連接過程之前不會發出抱怨。輸出看起來像這樣:

"/C/MinGW/msys/1.0/bin/make.exe" -f nbproject/Makefile-Debug.mk QMAKE= SUBPROJECTS= .build-conf 
make.exe[1]: Entering directory `/d/Maschinenbau/Diplom/Diplomarbeit/Programm/Comp_Pred' 
"/C/MinGW/msys/1.0/bin/make.exe" -f nbproject/Makefile-Debug.mk dist/Debug/MinGW_TDM-Windows/comp_pred.exe 
make.exe[2]: Entering directory `/d/Maschinenbau/Diplom/Diplomarbeit/Programm/Comp_Pred' 
mkdir -p dist/Debug/MinGW_TDM-Windows 

g++ -m32 -o dist/Debug/MinGW_TDM-Windows/comp_pred build/Debug/MinGW_TDM-Windows/_ext/725510466/Eingabe_Konstanten.o build/Debug/MinGW_TDM-Windows/_ext/725510466/InputOutput.o build/Debug/MinGW_TDM-Windows/_ext/725510466/Stoffwerte.o build/Debug/MinGW_TDM-Windows/_ext/725510466/Zustandsgroessen.o build/Debug/MinGW_TDM-Windows/main.o -Llib -lCoolProp 
build/Debug/MinGW_TDM-Windows/_ext/725510466/Eingabe_Konstanten.o: In function `Z6mStromv': 
d:/Maschinenbau/Diplom/Diplomarbeit/Programm/Comp_Pred/Eingabe_Konstanten.cpp:24: undefined reference to `InputOutput::lese(int)' 

我很抱歉這個全面的描述,但我真的不知道該怎麼做。我會非常感謝任何幫助。

回答

0

您已將lese()函數定義爲獨立函數,但您需要它作爲InputOutput類的成員。所以

double lese(int zeile) 

應該

double InputOutput::lese(int zeile) 

同樣爲您Eingabe_Konstanten

+0

的功能,就是它了!非常感謝你! :) – clemensf