2

メインメソッドからクラスメソッドを呼び出そうとすると、リンカーエラーが発生しました。私は答えを探しましたが、私の問題に当てはまるものは何もないようです。どんな助けでも大歓迎です。

FileSystem.h

#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

fillArrayFromFile

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);
}

pa2.cpp

#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

再度、感謝します。

4

1 に答える 1

1

関数を呼び出すコードをコンパイルする場合template、コンパイラは関数の完全な実装を確認できる必要があります。コンパイラが構築している時点で、コンパイラはヘッダーファイル(およびもちろん、からインクルードされている他のヘッダーファイル)内の定義pa2.cppのみを調べています。その時点では内容を見ていません。FileSystem.hpa2.cppFileSystem.cpp

これを修正するには、の実装をFileSystem::fillArrayFromFile()ファイルではなくヘッダー.cppファイルに移動します。次の2つの方法のいずれかを実行できます。

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)
    {
        // ...
    }
};
于 2012-09-19T00:01:21.063 に答える