2013-10-09 125 views
0

我正在編寫基本C++代碼來練習使用fstream和頭文件。我不斷收到以下錯誤:collect2:ld返回1退出狀態錯誤

initializer.cpp:(.text+0xd9): undefined reference to `DataSet::DataSet(int, std::basic_string, std::allocator >, std::basic_string, std::allocator >, double)' collect2: ld returned 1 exit status

這裏的主:

#include <iostream> 
#include <fstream> 
#include <cstdlib> 
#include "dataset.h" 
using namespace std; 

int main() 
{ 
    ofstream outData("data.txt",ios::binary); 

    if(!outData) 
    { 
    cerr<<"\nFile could not be opened!\n"; 
    exit(1); 
    } 

    DataSet blankData; 

    for(int i=0;i<100;i++) 
    outData.write(reinterpret_cast<const char *>(&blankData), 
     sizeof(DataSet)); 

    return 0; 
} 

和標題:

#ifndef DATASET_H 
#define DATASET_H 

#include <string> 
using namespace std; 

class DataSet 
{ 
public: 
    DataSet(int=0,string="",string="",double=0.0); 

    void setAccountNumber(int); 
    int getAccountNumber() const; 

    void setLastName(string); 
    string getLastName() const; 

    void setFirstName(string); 
    string getFirstName() const; 

    void setBalance(double); 
    double getBalance() const; 
private: 
    int accountNumber; 
    char lastName[15]; 
    char firstName[10]; 
    double balance; 
}; 

#endif 

和相應的.cpp:

#include <string> 
#include "dataset.h" 

DataSet::DataSet(int accountNumberValue, 
    string lastNameValue,string firstNameValue, 
    double balanceValue) 
{ 
    setAccountNumber(accountNumberValue); 
    setLastName(lastNameValue); 
    setFirstName(firstNameValue); 
    setBalance(balanceValue); 
} 

int DataSet::setAccountNumber(int accountNumberValue) 
{ 
    accountNumber=accountNumberValue; 
} 

void DataSet::getAccountNumber() const 
{ 
    return accountNumber; 
} 

string DataSet::setLastName(string lastNameString) 
{ 
    const char *lastNameValue=lastNameString.data(); 
    int length=lastNameString.size(); 
    length=(length<15?length:14); 
    strncpy(lastName,lastNameValue,length); 
    lastName[length]='\0'; 
} 

void DataSet::getLastName() const 
{ 
    return lastName; 
} 

string DataSet::setFirstName(string firstNameString) 
{ 
    const char *firstNameValue=firstNameString.data(); 
    int length=firstNameString.size(); 
    length=(length<10?length:9); 
    strncpy(firstName,firstNameValue,length); 
    firstName[length]='\0'; 
} 

void DataSet::getFirstName() const 
{ 
    return firstName; 
} 

double DataSet::setBalance(double balanceValue) 
{ 
    balance=balanceValue; 
} 

void DataSet::getBalance() const 
{ 
    return balance; 
} 
+0

而且你把所有**編譯目標代碼模塊鏈接到你的程序中? [見本文](http://stackoverflow.com/questions/12573816/what-is-an-undefined-reference-unresolved-external-symbol-error-and-how-doi-i-fix)。特別是第四個答案。 – WhozCraig

回答

1

的鏈接器找不到「DataSet :: D ataSet()「符號用於初始值設定項對象中。 如果爲相應的cpp生成的目標文件沒有與Initializer鏈接在一起,有時會發生這種情況,因爲您沒有將相應的cpp添加到project/makefile。

相關問題