[英]Linker Error LNK2019 in Visual C++
尝试从主方法调用类方法时遇到链接器错误。 我已经搜索了答案,但是似乎没有任何问题适用于我的问题,我们将不胜感激。
#ifndef FILE_SYSTEM_H
#define FILE_SYSTEM_H
#include <fstream>
#include <string>
#include <random>
#include "SortingAlgorithms.h"
#include "SortingAlgorithms.cpp"
using namespace std;
class FileSystem
{
private:
ifstream inFile;
ofstream outFile;
template <class T>
void fillArrays( T randomArray[], T sortedArray[], T backwardArray[], int size );
public:
FileSystem();
~FileSystem();
bool openFile(string fileName);
void writeToFile(string output);
void createTestFiles(string testFiles[]);
template <class T>
void fillArrayFromFile(T list[], int size);
};
#endif
template <class T>
void FileSystem::fillArrayFromFile(T list[], int size)
{
int i;
for(i = 0; i < size; i ++)
{
inFile >> list[i];
}
inFile.clear();
inFile.seekg(inFile.beg);
}
#include <iostream>
#include <ctime>
#include <string>
#include <iomanip>
#include "TimerSystem.h"
#include "FileSystem.h"
using namespace std;
int main()
{
FileSystem file;
int testArray[10];
file.openFile("test-10-0.txt");
file.fillArrayFromFile(testArray, 10);
}
pa2.obj : error LNK2019: unresolved external symbol "public: void __thiscall FileSystem::fillArrayFromFile<int>(int * const,int)" (??$fillArrayFromFile@H@FileSystem@@QAEXQAHH@Z) referenced in function _main
C:\Users\Matt\Google Drive\Programming\Data Structures & Algorithms\PA2-9-15-2012\Debug\PA2.exe : fatal error LNK1120: 1 unresolved externals
再次感谢。
在编译调用template
函数的代码时,编译器必须能够看到该函数的完整实现。 至此,编译器正在构建pa2.cpp
,编译器仅查看FileSystem.h
以及头文件(当然也包括pa2.cpp
包含的其他头文件)中的定义。 此时,它不会查看FileSystem.cpp
的内容。
要解决此问题,请将FileSystem::fillArrayFromFile()
的实现移至头文件而不是.cpp
文件。 您可以通过以下两种方式之一进行操作:
class FileSystem {
public:
template <class T>
void fillArrayFromFile(T list[], int size);
};
template <class T>
void FileSystem::fillArrayFromFile(T list[], int size)
{
// ...
}
要么
class FileSystem {
public:
template <class T>
void fillArrayFromFile(T list[], int size)
{
// ...
}
};
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.