2013-10-09 2 views
0

fstream 및 헤더 파일을 사용하여 연습하기위한 기본 C++ 코드를 작성하고 있습니다. 나는 다음과 같은 오류가 계속 : 여기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 

하고 해당 통화 당 :

#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-undef-reference-unresolved-external-symbol-error-and-how-do-i-fix). 특히 네 번째 대답. – WhozCraig

답변

1

을 링커가 "DataSet :: D"를 찾지 못했습니다. ataSet() "기호는 Initializer 객체에서 사용됩니다. 해당하는 cpp에 대해 생성 된 오브젝트 파일이 Initializer와 함께 링크되지 않은 경우 발생할 수 있습니다. 해당하는 cpp를 project/makefile에 추가하지 않았기 때문에 발생할 수 있습니다.

관련 문제