簡體   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