、これはここでは例えば、既にカバーされています:static array class variable "multiple definition" C++複数の定義C++
をしかし、私はここにいくつかの詳細をしないのです。 Foo.cpp
#include <iostream>
#include "Model.h"
int main(int argc, char** argv){
std::cout << "hello" << std::endl;
return 0;
}
Model.h
#ifndef MODEL_H
#define MODEL_H
#include <string>
#include "md2Loader.h"
class Model{
public:
Model();
Model(const std::string& model_file);
private:
md2_header_t header;
modelData_t model;
};
#endif
Model.cpp
#include "Model.h"
#include "md2Loader.h"
Model::Model(){}
Model::Model(const std::string& model_file){
model = md2Loader::load_model(model_file);
}
とmd2Loader.h
#ifndef MD2LOADER_H
#define MD2LOADER_H
struct modelData_t{
int numVertices;
int numTextures;
// etc
};
struct md2_header_t {
std::string version;
};
class md2Loader{
public:
md2Loader(){};
static modelData_t load_model(const std::string& model_file);
};
modelData_t md2Loader::load_model(const std::string& model_file){
modelData_t result;
result.numVertices = 1000;
result.numTextures = 10;
return result;
}
#endif
:
私は、次のクラスを持っています
リンカーは、複数の定義を文句を言います。しかし、私は確信していません、なぜ。 #ifndef、#defineプリプロセッサディレクティブは役に立ちませんか?私はmd2Loader.hがModel.cppとModel.hの両方に含まれるようにしています。 Model.hで実装を行い、Model.cppを離れたままにしておくと、コンパイルとリンクが正常に行われます。私は、プリプロセッサの指示が起こるのを防ぐと思っていましたが、明らかに私はそこに何かを見逃しています。
あなたは_ヘッダファイル – Danh
で定義された 'inline'機能に必要な「#ifndefの、の#defineプリプロセッサディレクティブは助けないのですか?」_ノー –