ここのMSDNライブラリで説明されているように、私はpimplイディオムを少し実験したいと思いました。今私Foo.hpp
は
template<typename T>
class Foo {
public:
typedef std::shared_ptr<Foo<T>> Ptr;
Foo();
private:
class Impl;
std::unique_ptr<Impl> pImpl;
};
T
パラメータがまだ使用されていない場合。実装はに保存されますFoo.cpp
template<typename T>
class Foo<T>::Impl {
public:
int m_TestVar;
};
template<typename T>
Foo<T>::Foo() : pImpl(new Impl) {
this->pImpl->m_TestVar = 0x3713;
}
現在、コンパイラには2つのエラーと1つの警告があります。
use of undefined type 'Foo<T>::Impl'; ... vc\include\memory in line 1150
can't delete an incomplete type; ... vc\include\memory in line 1151
deletion of pointer to incomplete type 'Foo<T>::Impl'; no destructor called; ... vc\include\memory in line 1152
ここでの競合とは何ですか?どうすれば解決できますか?
編集。std::make_shared
1つの古いバージョンに基づいて、-copy&pastefailの呼び出しを削除しました。