C ++在头文件中包含一个Header来调用一个单独的文件类

时间:2014-10-26 05:08:48

标签: c++ visual-c++-2010

假设我有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个未解析的外部

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;
}
使用默认构造函数初始化

computerNamecomputerSoftware。由于您没有实现Software的默认构造函数,因此您遇到链接器错误。

Software::Software()中实施Software.cpp,一切都应该有效。

Software::Software() : softwareName(), softwarePrice(0.0) {
}