假设我有2个名为Computer.h和Software.h的头文件 两者都是在分离的文件Computer.cpp和Software.cpp上实现的,我关心的是在计算机中声明一个软件。
Computer.h
#ifndef _COMPUTER_H
#define _COMPUTER_H
#include "Software.h"
class Computer{
private:
std::string computerName;
int ramSize;
Software computerSoftware;
public:
Computer();
Computer(std::string name, int size);
int GetRamSize();
std::string GetComputerName();
};
#endif
Software.h
#ifndef _SOFTWARE_H
#define _SOFTWARE_H
class Software{
private:
std::string softwareName;
double softwarePrice;
public:
Software();
Software(std::string name, double price);
double GetPrice();
std::string GetSoftwareName();
};
#endif
Computer.cpp
#include <string>
#include <iostream>
#include "Computer.h"
using namespace std;
Computer::Computer(string name, int size){
computerName = name;
ramSize = size;
}
int Computer::GetRamSize(){
return ramSize;
}
string Computer::GetComputerName(){
return computerName;
}
Software.cpp
#include <string>
#include <iostream>
#include "Software.h"
using namespace std;
Software::Software(string name, double price){
softwareName = name;
softwarePrice = price;
}
double Software::GetPrice(){
return softwarePrice;
}
string Software::GetSoftwareName(){
return softwareName;
}
然而,它会在我的visual c ++ 2010 express上构建错误:
Computer.obj:错误LNK2019:未解析的外部符号&#34; public: __thiscall Software :: Software(void)&#34; (?? 0Software @@ QAE @ XZ)在函数&#34; public中引用:__thiscall Computer :: Computer(class 的std :: basic_string的,类 std :: allocator&gt;,int)&#34; (?? 0Computer @@ @ QAE V'$ basic_string的@ DU?$ char_traits @ d @ @@ STD V'$分配器@ d @ @@ 2 STD @@ H + Z) 1&gt; C:\ Users \ farissyariati \ documents \ visual studio
2010 \ Projects \ CppConsoleApps \ Debug \ CppConsoleApps.exe:致命错误LNK1120:1个未解析的外部
答案 0 :(得分:0)
此功能
Computer::Computer(string name, int size){
computerName = name;
ramSize = size;
}
相当于:
Computer::Computer(string name, int size) : computerName(), computerSoftware() {
computerName = name;
ramSize = size;
}
使用默认构造函数初始化 computerName
和computerSoftware
。由于您没有实现Software
的默认构造函数,因此您遇到链接器错误。
在Software::Software()
中实施Software.cpp
,一切都应该有效。
Software::Software() : softwareName(), softwarePrice(0.0) {
}