2013-10-09 3 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-do-i-fix). В частности, четвертый ответ. – WhozCraig

ответ

1

линкер не находит «DataSet :: D ataSet() ", который используется в объекте Initializer. Это может произойти, если объектный файл, сгенерированный для соответствующего cpp, не связан вместе с Initializer, иногда это может произойти, потому что вы не добавили соответствующий cpp в project/makefile.

Смежные вопросы