0

test.cppは持っています:

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

int main ()
{
    auto dliste = d::data_preparation::prepare_d(100);
    cout << "Hello World!\n";
    return 0;
}

first.hは持っています:

namespace d {
    namespace data_preparation {
        something;
        std::vector<row<mdata::dliste>> prepare_d(int f);
        something;
    }
}

first.cppは持っています:

#include "first.h"
something;
namespace d {
    namespace data_preparation {
        vector<row<mdata::dliste>> prepare_d(int f) {
            vector<row<mdata::dliste>> dliste;
            cout << f << '\n';
            return dliste;
        }
    }
}

これをコンパイルすると、次のようになります。

`d::data_prepation::prepare_d(int)' への未定義の参照

編集済み

Makefileは持っています:

test: test.o
        $(CXX) -o $@ $(LDFLAGS) $^ $(LDLIBS)

どうにか改造したほうがいいでしょうか?

4

1 に答える 1

2

実行可能ファイルへのリンクを忘れている可能性がありfirst.cppます。

次のコマンドを実行するだけです (gcc を使用している場合):

g++ -c first.cpp -o first.o
g++ -c test.cpp -o test.o
g++ test.o first.o

または、コンパクトバージョンを使用してください:

g++ first.cpp test.cpp -o app

次の行に沿って Makefile を編集する必要があります。

app: test.o first.o
    $(CXX) $^ -o $@ $(LDFLAGS) $(LDLIBS)

test.o: test.cpp
    $(CXX) -c test.cpp -o first.o

first.o: first.cpp
    $(CXX) -c first.cpp -o first.o

注意: インデントには 4 つのスペースを使用する必要がありますが、Makefile では代わりにタブが必要になる場合があります。

于 2013-03-20T08:52:08.867 に答える