.cpp 文件不会 link 与 .h 文件
.cpp file will not link with .h file
我正在尝试将两个 cpp 文件 - MIPSConversion.cpp
和 TestMIPSConversion.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);
}
readInTheFile
是 MIPSConversion
的非 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 的实例才能实际调用该函数。您可以通过多种方式解决这个问题。
将函数声明为静态。这意味着可以在没有 MIPSConversion 实例的情况下调用该函数(考虑到实现,这似乎是您想要的)。简单易行,
class MIPSConversion
{
public:
MIPSConversion();
~MIPSConversion();
static void readInTheFile();
};
然后当您调用该函数时,在其前面加上 class 名称
MIPSConversion::readInTheFile();
创建 class 的实例。只需创建一个实例,然后从中调用函数。
MIPSConversion conversionVariable;
conversionVariable.readInTheFile();
如果您想完全跳过 class 原理图(也许 MIPSConversion 的 "instance" 没有意义,只需将 class 替换为命名空间并遵循与静态函数相同的调用约定。
namespace MIPSConversion
{
void readInTheFile();
}
并在 TestMIPSConversion.cpp
MIPSConversion::readInTheFile();
我正在尝试将两个 cpp 文件 - MIPSConversion.cpp
和 TestMIPSConversion.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);
}
readInTheFile
是 MIPSConversion
的非 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 的实例才能实际调用该函数。您可以通过多种方式解决这个问题。
将函数声明为静态。这意味着可以在没有 MIPSConversion 实例的情况下调用该函数(考虑到实现,这似乎是您想要的)。简单易行,
class MIPSConversion { public: MIPSConversion(); ~MIPSConversion(); static void readInTheFile(); };
然后当您调用该函数时,在其前面加上 class 名称
MIPSConversion::readInTheFile();
创建 class 的实例。只需创建一个实例,然后从中调用函数。
MIPSConversion conversionVariable; conversionVariable.readInTheFile();
如果您想完全跳过 class 原理图(也许 MIPSConversion 的 "instance" 没有意义,只需将 class 替换为命名空间并遵循与静态函数相同的调用约定。
namespace MIPSConversion { void readInTheFile(); }
并在 TestMIPSConversion.cpp
MIPSConversion::readInTheFile();