ここ
Can't allocate class with forward declared value in std::map member variable
私たちのコードベースに記載されているように私は同じ問題について来ました。私は、CPPにコン&デストラクタを定義するファイルをコンパイルすることを可能にすることを発見したコードと周りいじる後不完全な型::マップ
Hoever私も
...私たちのコンパイラ(MSVC 2017)はこれをコンパイルすることができ、他の例を見つけました。
test.h
で:
#ifndef TEST_H
#define TEST_H
#include <map>
struct Incomplete;
class Test {
std::map<int, Incomplete> member;
public:
Test();
~Test();
int foo() { return 0; }
};
#endif
test.cpp
において:
#include "test.h"
struct Incomplete {};
Test::Test() {}
Test::~Test() {}
main.cpp
において:
#include "test.h"
int main()
{
Test test;
return test.foo();
}
コンストラクタ/デストラクタ定義の上に 'struct Incomplete {}; 'を配置したので、' Incomplete'がその時点で完了するためです。 – VTT
* cpp *内のcon-&destructorを何に対して定義していますか? – stijn
あなたが "発見"したように見えますが、メソッド名を指定すると...デストラクタでさえ...インターフェースファイルでは、実装ファイルに定義が必要です。インタフェースのインラインメソッドは、実装時に定義を必要としません。私には適切なデザインのように見えます。 –