見て回って、いくつかの同様の質問が見つかりましたが、それらのどれも同じではありませんでした。ほとんどはコンストラクタまたはデストラクタと関係していました。この問題は、おそらく、私の錆びたC++リンカのメモリの結果(数年後にそれを取り戻すこと)よりも多いでしょう。ldシンボルが見つかりません
data.h
#pragma once
namespace test {
class Data_V1 {
public:
// some getters/setters
int getData() { return _d; }
void setData(int d) { _d = d; }
private:
// some data
int _d;
};
}
builder.h
#pragma once
namespace test {
template <class V>
class Builder {
public:
void build();
};
}
builder.cpp
:これはおそらく、リンカーの基本的な誤解があるため私は本当のシンプルおこう
#include <iostream>
#include "builder.h"
namespace test {
template<class V>
void Builder<V>::build() {
std::cout << "Insert building logic" << std::endl;
}
}
main.cppに
#include "builder.h"
#include "data.h"
using namespace test;
int main(int argc, char* argv[]) {
Builder<Data_V1> b;
b.build();
}
コンパイル:
g++ -Wall -ansi -pedantic -c builder.cpp
g++ -Wall -ansi -pedantic -c main.cpp
g++ -Wall -ansi -pedantic -o main main.o builder.o
リンクエラー:
Undefined symbols for architecture x86_64:
"test::Builder<test::Data_V1>::build()", referenced from:
_main in main.o
ld: symbol(s) not found for architecture x86_64
collect2: ld returned 1 exit status
任意の助けをいただければ幸いです!
私はnm builder.oを実行すると、方法 "ビルド"が表示されません理由はわかりません – nknize