.cpp 文件不会 link 与 .h 文件

.cpp file will not link with .h file

我正在尝试将两个 cpp 文件 - MIPSConversion.cppTestMIPSConversion.cpp - 连接到同一个头文件 - MIPSConversion.h。但是,当我尝试从 main()(位于 TestMIPSConversion.cpp)调用方法 readInTheFile()(位于 MIPSConversion.cpp)时,出现错误 use of undeclared identifier 'readInTheFile'。我该如何纠正这个问题?

MIPSConversion.h

#include <iostream>
using namespace std;

class MIPSConversion
{
    public: 
    MIPSConversion();
    ~MIPSConversion();

    void readInTheFile();
};

MIPSConversion.cpp

#include <iostream>
#include <fstream> 
#include "MIPSConversion.h"
using namespace std;

   MIPSConversion::MIPSConversion(){}
   MIPSConversion::~MIPSConversion(){}

    void MIPSConversion::readInTheFile(){
        string inputFileName; 
        char* arrayString = new char[31];

        cout << "Enter the name of the file you want to import: " << endl;
        inputFileName = cin;
        getline(cin, inputFileName);
        ifstream inputFile (inputFileName, ifstream::in);

        while (inputFile.good()) {
            for(int i = 0; i < 31; i++){
                arrayString[i] = inputFile.get();
            }  
            cout << arrayString; 
            if (inputFile.peek() == std::ifstream::traits_type::eof()){
                break;
            }
        }

        inputFile.close();
    }

测试MIPSConversion.cpp

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

int main()
{   
    readInTheFile();
    return(0);
}

readInTheFileMIPSConversion 的非 static 成员,因此您必须创建一个 MIPSConversion 对象来调用 readInTheFile:

MIPConversion mipsConversion;
mipsConversion.readInTheFile();

如果 readInTheFile 或其他函数实际上没有您想要存储在 mipsConversion 中的数据,您可以完全删除 mipsConversion class,并使 readInTheFile 一个文件作用域(非成员)函数。或者,如果 MIPSConversion class 有其他用途,但 readInTheFile 不需要访问其数据,则可以将 readInTheFile 保留在 MIPSConversion 中,但使其成为 static,这意味着即使没有 MIPSConversion 的对象实例也可以调用它,如:

MIPSConversion::readInTheFile();

您需要在main中创建一个MIPSConversion的对象。然后就可以使用它的成员函数readInTheFile()了。像下面这样:

MIPSConversion myObj;
myObj.readInTheFile();

您当前已将 readInTheFile 声明为 class MIPSConversion 的成员函数,这意味着您需要 class MIPSConversion 的实例才能实际调用该函数。您可以通过多种方式解决这个问题。

  1. 将函数声明为静态。这意味着可以在没有 MIPSConversion 实例的情况下调用该函数(考虑到实现,这似乎是您想要的)。简单易行,

    class MIPSConversion
    {
    public: 
        MIPSConversion();
        ~MIPSConversion();
    
        static void readInTheFile();
    };
    

然后当您调用该函数时,在其前面加上 class 名称

    MIPSConversion::readInTheFile();
  1. 创建 class 的实例。只需创建一个实例,然后从中调用函数。

    MIPSConversion conversionVariable;
    conversionVariable.readInTheFile();
    
  2. 如果您想完全跳过 class 原理图(也许 MIPSConversion 的 "instance" 没有意义,只需将 class 替换为命名空间并遵循与静态函数相同的调用约定。

    namespace MIPSConversion
    {
        void readInTheFile();
    }
    

并在 TestMIPSConversion.cpp

MIPSConversion::readInTheFile();