fstream
およびヘッダー ファイルの使用を練習するために、基本的な C++ コードを作成しています。次のエラーが発生し続けます。
initializer.cpp:(.text+0xd9): 「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;
}