不同 CPP 文件中的单独类

separate classes in different cpp files

本文关键字:单独类 文件 CPP 不同      更新时间:2023-10-16

我正在尝试将类分离到不同的cpp文件。

我的文件是:

来源.h:

#pragma once
#include "stdafx.h"
#include <iostream>

class printData {
public:
    void print(int i);
    void print(double  f);
    void print(char* c);
};

资料来源.cpp:

#include "stdafx.h"
#include <iostream>
using namespace std;
class printData {
public:

    void print(int i) {
        cout << "Printing int: " << i << endl;
    }
    void print(double  f) {
        cout << "Printing float: " << f << endl;
    }
    void print(char* c) {
        cout << "Printing character: " << c << endl;
    }
};

控制台应用程序3.cpp:

#include "stdafx.h"
#include <iostream>
#include "Source.h"
using namespace std;

int main(void) {
    printData pd;
    // Call print to print integer
    pd.print(5);
    // Call print to print float
    pd.print(500.263);
    // Call print to print character
    pd.print("Hello C++");
    return 0;
}

但是当我尝试构建到项目时,我得到:

1>ConsoleApplication3.obj : error LNK2019: unresolved external symbol "public: void __thiscall printData::print(int)" (?print@printData@@QAEXH@Z) referenced in function _main
1>ConsoleApplication3.obj : error LNK2019: unresolved external symbol "public: void __thiscall printData::print(double)" (?print@printData@@QAEXN@Z) referenced in function _main
1>ConsoleApplication3.obj : error LNK2019: unresolved external symbol "public: void __thiscall printData::print(char *)" (?print@printData@@QAEXPAD@Z) referenced in function _main

如果我将所有文件合并到控制台应用程序 3 中.cpp则不会有错误。

这里有两个错误:

  1. 您不会在相应的.cpp文件中包含 .h 文件。
  2. .cpp文件中有一个类重定义。

在.cpp文件中,应按如下方式定义方法:

#include "stdafx.h"
#include <iostream>
#include "Source.h"
using namespace std;
void printData::print(int i) {
    cout << "Printing int: " << i << endl;
}
void printData::print(double  f) {
    cout << "Printing float: " << f << endl;
}
void printData::print(char* c) {
    cout << "Printing character: " << c << endl;
}

不要.cpp文件中编写此类 printData 等,因为它是 Source.h 中定义的类的另一个定义。您应该只按照上面显示的方式在.cpp文件中定义类方法本身。

编译器抱怨,因为主文件看到的所有.cpp都是 Source.h 文件,该文件有一个仅声明的类,未定义为 Source.cpp 不包含 Source.h。但是,即使您确实在Source.cpp中包含Source.h,由于上述原因,您也会遇到类重新定义错误。