C++ .cpp文件将不会与.h文件链接

C++ .cpp文件将不会与.h文件链接,c++,header-files,undeclared-identifier,C++,Header Files,Undeclared Identifier,我正在尝试将两个cpp文件-MIPSConversion.cpp和TestMIPSConversion.cpp-连接到同一头文件-MIPSConversion.h。但是,当我试图从main()(位于TestMIPSConversion.cpp)调用方法readinfile()(位于TestMIPSConversion.cpp)时,我得到了错误使用了未声明的标识符“readinfile”。如何更正此问题 MIPSConversion.h #include <iostream> usin

我正在尝试将两个cpp文件-
MIPSConversion.cpp
TestMIPSConversion.cpp
-连接到同一头文件-
MIPSConversion.h
。但是,当我试图从
main()
(位于
TestMIPSConversion.cpp
)调用方法
readinfile()
(位于
TestMIPSConversion.cpp
)时,我得到了错误
使用了未声明的标识符“readinfile”
。如何更正此问题

MIPSConversion.h

#include <iostream>
using namespace std;

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

    void readInTheFile();
};
#包括
使用名称空间std;
类MIPSConversion
{
公众:
MIPSConversion();
~MIPSConversion();
void readinfile();
};
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();
    }
#include <iostream>
#include "MIPSConversion.h"
using namespace std;

int main()
{   
    readInTheFile();
    return(0);
}
#包括
#包括
#包括“MIPSConversion.h”
使用名称空间std;
MIPSConversion::MIPSConversion(){}
MIPSConversion::~MIPSConversion(){}
void MIPSConversion::readInTheFile(){
字符串输入文件名;
char*arrayString=新字符[31];

cout
readinfile
MIPSConversion
的非
静态成员,因此必须创建一个
MIPSConversion
对象,在该对象上调用
readinfile

MIPConversion mipsConversion;
mipsConversion.readInTheFile();
如果实际上没有通过
readinfile
或其他函数将数据存储在
mipsConversion
或其他函数中,则可以完全删除
mipsConversion
类,并将
readinfile
设为文件范围(非成员)函数。或者,如果您对
MIPSConversion
类有其他用途,但
readInTheFile
不需要访问其数据,则可以将
readInTheFile
保留在
MIPSConversion
中,但将其设置为
static
,这意味着即使没有
MIPSConversion
的对象实例也可以调用它,例如:

MIPSConversion::readInTheFile();

readinfile
MIPSConversion
的非
静态成员,因此必须创建一个
MIPSConversion
对象,在该对象上调用
readinfile

MIPConversion mipsConversion;
mipsConversion.readInTheFile();
如果实际上没有通过
readinfile
或其他函数将数据存储在
mipsConversion
或其他函数中,则可以完全删除
mipsConversion
类,并将
readinfile
设为文件范围(非成员)函数。或者,如果您对
MIPSConversion
类有其他用途,但
readInTheFile
不需要访问其数据,则可以将
readInTheFile
保留在
MIPSConversion
中,但将其设置为
static
,这意味着即使没有
MIPSConversion
的对象实例也可以调用它,例如:

MIPSConversion::readInTheFile();

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

MIPSConversion myObj;
myObj.readInTheFile();

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

MIPSConversion myObj;
myObj.readInTheFile();

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

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

    class MIPSConversion
    {
    public: 
        MIPSConversion();
        ~MIPSConversion();
    
        static void readInTheFile();
    };
    
  • 然后在调用函数时,在其前面加上类名

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

    MIPSConversion conversionVariable;
    conversionVariable.readInTheFile();
    
  • 如果您想完全跳过类模式(可能有一个MIPSConversion的“实例”没有意义),只需将类替换为名称空间,并遵循与静态函数相同的调用约定即可

    namespace MIPSConversion
    {
        void readInTheFile();
    }
    
  • 在TestMIPSConversion.cpp中

    MIPSConversion::readInTheFile();
    

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

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

    class MIPSConversion
    {
    public: 
        MIPSConversion();
        ~MIPSConversion();
    
        static void readInTheFile();
    };
    
  • 然后在调用函数时,在其前面加上类名

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

    MIPSConversion conversionVariable;
    conversionVariable.readInTheFile();
    
  • 如果您想完全跳过类模式(可能有一个MIPSConversion的“实例”没有意义),只需将类替换为名称空间,并遵循与静态函数相同的调用约定即可

    namespace MIPSConversion
    {
        void readInTheFile();
    }
    
  • 在TestMIPSConversion.cpp中

    MIPSConversion::readInTheFile();
    

    这与标题、链接或CPP(预处理器)无关。这是一个关于如何在类上调用成员函数的基本问题。您可以大幅缩小代码范围。这与标题、链接或CPP(预处理器)无关。这是一个关于如何在类上调用成员函数的基本问题。您可以大大缩小代码的范围。