c++ - 收集 2 :ld returned 1 exit status error

标签 c++ header fstream

<分区>

我正在编写基本的 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 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;
}

最佳答案

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

关于c++ - 收集 2 :ld returned 1 exit status error,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19262819/

相关文章:

c++ - 在编译或初始化时对长数组进行编程初始化

c++ - 如何用opencv读取电表指针?

php - HTTP 头文件未完全下载

c - 头文件中的值结构导致 "duplicate symbol"链接器错误

c++ - 在C++中,有没有一种方法可以转到文本文件中的特定行?

c++ - 更快地标准化下三角矩阵

c++ - Qt从哪个版本开始支持opengl?

c++ - 将标题添加到大文件的最佳方法是什么

c++ - 我应该使用什么 I/O 函数来写入 .bmp 文件?

C++ ifstream 跳过数据