.cpp文件不会与.h文件链接

时间:2016-03-28 02:37:46

标签: c++ header-files undeclared-identifier

我正在尝试将两个cpp文件 - MIPSConversion.cppTestMIPSConversion.cpp - 连接到同一个头文件 - MIPSConversion.h。但是,当我尝试从readInTheFile()(位于MIPSConversion.cpp)调用方法main()(位于TestMIPSConversion.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();
    }

TestMIPSConversion.cpp

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

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

3 个答案:

答案 0 :(得分:3)

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

<?xml version="1.0" encoding="utf-8" ?>
<resources>
    <style name="myTheme" parent="@android:style/Theme.Material.Light">
        <item name="android:listViewStyle">@style/ListViewStyle.Light</item>
    </style>

    <style name="ListViewStyle.Light" parent="@android:style/Widget.ListView">
        <item name="android:listSelector">@android:color/transparent</item>
    </style>
</resources>

答案 1 :(得分:1)

readInTheFilestatic的非MIPSConversion成员,因此您必须创建一个MIPSConversion对象,可以在其上调用readInTheFile

MIPConversion mipsConversion;
mipsConversion.readInTheFile();

如果您想要mipsConversion readInTheFile或其他函数存储的数据实际上没有数据,则可以完全删除mipsConversion类,并使{{1文件范围(非成员)函数。或者,如果您对readInTheFile课程有其他用途,但MIPSConversion无需访问其数据,则可以readInTheFile readInTheFile中的MIPSConversion static,这意味着即使没有MIPSConversion的对象实例也可以调用它,如:

MIPSConversion::readInTheFile();

答案 2 :(得分:1)

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

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

    class MIPSConversion
    {
    public: 
        MIPSConversion();
        ~MIPSConversion();
    
        static void readInTheFile();
    };
    
  2. 然后当你调用该函数时,在它前面添加类名

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

      MIPSConversion conversionVariable;
      conversionVariable.readInTheFile();
      
    2. 如果你想完全跳过类的原理图(也许有一个&#34;实例&#34;的MIPSConversion没有意义,只需用Namespace替换类并遵循相同的调用约定与静态函数一样。

      namespace MIPSConversion
      {
          void readInTheFile();
      }
      
    3. 和TestMIPSConversion.cpp

      MIPSConversion::readInTheFile();