//cpeer.h
#ifndef CPEER_H_
#define CPEER_H_
#include <string>
struct CPeer
{
std::string name;
};
#endif /*CPEER_H_*/
//cpeermanager.h
#ifndef CPEERMANAGER_H_
#define CPEERMANAGER_H_
class CPeer;
#include <boost/shared_ptr.hpp>
#include <boost/scoped_ptr.hpp>
class CPeerManager
{
public:
CPeerManager();
boost::scoped_ptr<CPeer> cp_; //error
// boost::shared_ptr<CPeer> cp_; // ok
};
#endif /*CPEERMANAGER_H_*/
//cpeermanager.cpp
#include "cpeer.h"
#include "cpeermanager.h"
CPeerManager::CPeerManager():
cp_ (new CPeer() )
{
}
//main.cpp
#include "cpeermanager.h"
int main()
{
CPeerManager cp;
}
i get
**** Build of configuration Debug for project scoped_ptr_test ****
make -k all
'Building file: ../cpeermanager.cpp'
'Invoking: GCC C++ Compiler'
g++ -O0 -g3 -Wall -c -fmessage-length=0 -MMD -MP -MF"cpeermanager.d" -MT"cpeermanager.d" -o"cpeermanager.o" "../cpeermanager.cpp"
'Finished building: ../cpeermanager.cpp'
' '
'Building file: ../main.cpp'
'Invoking: GCC C++ Compiler'
g++ -O0 -g3 -Wall -c -fmessage-length=0 -MMD -MP -MF"main.d" -MT"main.d" -o"main.o" "../main.cpp"
c:/mingw/bin/../lib/gcc/i686-pc-mingw32/4.1.2/../../../../include/boost/checked_delete.hpp: In function 'void boost::checked_delete(T*) [with T = CPeer]':
c:/mingw/bin/../lib/gcc/i686-pc-mingw32/4.1.2/../../../../include/boost/scoped_ptr.hpp:77: instantiated from 'boost::scoped_ptr<T>::~scoped_ptr() [with T = CPeer]'
../cpeermanager.h:11: instantiated from here
c:/mingw/bin/../lib/gcc/i686-pc-mingw32/4.1.2/../../../../include/boost/checked_delete.hpp:32: error: invalid application of 'sizeof' to incomplete type 'CPeer'
c:/mingw/bin/../lib/gcc/i686-pc-mingw32/4.1.2/../../../../include/boost/checked_delete.hpp:32: error: creating array with negative size ('-0x000000001')
c:/mingw/bin/../lib/gcc/i686-pc-mingw32/4.1.2/../../../../include/boost/checked_delete.hpp:33: error: invalid application of 'sizeof' to incomplete type 'CPeer'
c:/mingw/bin/../lib/gcc/i686-pc-mingw32/4.1.2/../../../../include/boost/checked_delete.hpp:33: error: creating array with negative size ('-0x000000001')
c:/mingw/bin/../lib/gcc/i686-pc-mingw32/4.1.2/../../../../include/boost/checked_delete.hpp:34: warning: possible problem detected in invocation of delete operator:
c:/mingw/bin/../lib/gcc/i686-pc-mingw32/4.1.2/../../../../include/boost/checked_delete.hpp:29: warning: 'x' has incomplete type
../cpeermanager.h:4: warning: forward declaration of 'struct CPeer'
c:/mingw/bin/../lib/gcc/i686-pc-mingw32/4.1.2/../../../../include/boost/checked_delete.hpp:34: note: neither the destructor nor the class-specific operator delete will be called, even if they are declared when the class is defined.
make: *** [main.o] Error 1
make: Target `all' not remade because of errors.
Build complete for project scoped_ptr_test
/// why boost::shared_ptr can used to Minimize compilation dependencies between files,
yet boost::scoped_ptr cannot. I needn't to use reference cout.may someboby help me out of the trouble.thanks!
iPod、万 点 巨 额 点 卡、奖 学 金……海 量 奖 品,想 拿 就 拿!