0

我正在编写基本的 C++ 代码来练习使用fstream和头文件。我不断收到以下错误:

initializer.cpp:(.text+0xd9): undefined reference to `DataSet::DataSet(int, std::basic_string, std::allocator >, std::basic_string, std::allocator >, double)' collect2: ld返回 1 个退出状态

这是主要的:

#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;
}
4

1 回答 1

1

链接器未找到 Initializer 对象中使用的“DataSet::DataSet()”符号。如果为相应的 cpp 生成的目标文件没有与 Initializer 链接在一起,则可能会发生这种情况,有时可能是因为您没有将相应的 cpp 添加到 project/makefile 中。

于 2013-10-09T05:08:28.310 回答