繁体   English   中英

.cpp文件将不会与.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'的错误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();
    }

TestMIPSConversion.cpp

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

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

您需要在main中创建一个MIPSConversion对象。 然后,您可以使用其成员函数readInTheFile()。 如下所示:

MIPSConversion myObj;
myObj.readInTheFile();

readInTheFile是一个非static成员MIPSConversion ,所以你必须创建一个MIPSConversion在其上调用对象readInTheFile

MIPConversion mipsConversion;
mipsConversion.readInTheFile();

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

MIPSConversion::readInTheFile();

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

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

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

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

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

     MIPSConversion conversionVariable; conversionVariable.readInTheFile(); 
  2. 如果要完全跳过类模式(使用MIPSConversion的“实例”可能没有意义,只需将类替换为Namespace并遵循与静态函数相同的调用约定。

     namespace MIPSConversion { void readInTheFile(); } 

并在TestMIPSConversion.cpp中

MIPSConversion::readInTheFile();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM