智能指针帮助
这是一个非侵入式引用计数智能指针类我是
正在处理;我一直得到一个22 C:\Dev-Cpp \SmrtPtr.hpp ISO C ++禁止
声明`SmrtPtrDB''没有类型"错误。
代码:
SmrtPtr.hpp
#pragma曾经
模板< class T>
类SmrtPtr
{
公开:
显式SmrtPtr(T * obj):ptr(obj)
{
DataBase.add();
for(;;)
{
if(isInvalid())
删除此内容;
}
}
SmrtPtr(const SmrtPtr< T>& rhs):ptr(rhs.obj){DataBase.add()}
~SmrtPtr(){delete ptr; DataBase.sub()}
T& operator *(){return * ptr;}
T * operator->(){return ptr;}
T ** operator&(){return& ptr;}
私人:
静态SmrtPtrDB< TDataBase;
bool isInvalid()
{
for(;;)
if(!DataBase.status())
返回true;
else返回false;
}
T * ptr;
};
SmrtPtrDB.hpp
#pragma一次
#include" SmrtPtr.hpp"
模板< class T>
类SmrtPtrDB
{
public:
SmrtPtrDB():num(0){}
~SmrtPtrDB(){ }
void add(){num ++;}
void sub(){num--);
int status(){return num ;}
私人:
int num;
};
你能帮助我吗?在这?我甚至不确定我是否正确编码了
非侵入式引用。谢谢!!!!!
Here''s a non intrusive reference counting smart pointer class I''m
working on; I keep getting a "22 C:\Dev-Cpp\SmrtPtr.hpp ISO C++ forbids
declaration of `SmrtPtrDB'' with no type" error.
Code:
SmrtPtr.hpp
#pragma once
template<class T>
class SmrtPtr
{
public:
explicit SmrtPtr(T* obj):ptr(obj)
{
DataBase.add();
for(;;)
{
if(isInvalid())
delete this;
}
}
SmrtPtr(const SmrtPtr<T>& rhs):ptr(rhs.obj){DataBase.add()}
~SmrtPtr(){delete ptr; DataBase.sub()}
T& operator*(){return *ptr;}
T* operator->(){return ptr;}
T** operator&(){return &ptr;}
private:
static SmrtPtrDB<TDataBase;
bool isInvalid()
{
for(;;)
if(!DataBase.status())
return true;
else return false;
}
T* ptr;
};
SmrtPtrDB.hpp
#pragma once
#include "SmrtPtr.hpp"
template<class T>
class SmrtPtrDB
{
public:
SmrtPtrDB():num(0){}
~SmrtPtrDB(){}
void add(){num++;}
void sub(){num--);
int status(){return num;}
private:
int num;
};
Could you help me out on this? I''m not even sure if I''m coding the
non-intrusive reference counting correctly. Thanks!!!!!
Protoman写道:
Protoman wrote:
这是一个非侵入式引用计数智能指针类我是
在工作;我一直得到一个22 C:\Dev-Cpp \SmrtPtr.hpp ISO C ++禁止
声明`SmrtPtrDB''没有类型"错误。
代码:
SmrtPtr.hpp
#pragma曾经
模板< class T>
类SmrtPtr
{
公开:
显式SmrtPtr(T * obj):ptr(obj)
{
DataBase.add();
for(;;)
{
if(isInvalid())
删除此内容;
}
}
SmrtPtr(const SmrtPtr< T>& rhs):ptr(rhs.obj){DataBase.add()}
~SmrtPtr(){delete ptr; DataBase.sub()}
T& operator *(){return * ptr;}
T * operator->(){return ptr;}
T ** operator&(){return& ptr;}
私人:
静态SmrtPtrDB< TDataBase;
bool isInvalid()
{
for(;;)
if(!DataBase.status())
返回true;
else返回false;
}
T * ptr;
};
SmrtPtrDB.hpp
#pragma一次
#include" SmrtPtr.hpp"
模板< class T>
class SmrtPtrDB
{
public:
SmrtPtrDB():num(0){}
~ SmrtPtrDB(){}
void add(){num ++;}
void sub(){num--);
int status( ){return num;}
private:
int num;
};
可以你能帮我解决这个问题吗?我甚至不确定我是否正确编码了
非侵入式引用。谢谢!!!!!
Here''s a non intrusive reference counting smart pointer class I''m
working on; I keep getting a "22 C:\Dev-Cpp\SmrtPtr.hpp ISO C++ forbids
declaration of `SmrtPtrDB'' with no type" error.
Code:
SmrtPtr.hpp
#pragma once
template<class T>
class SmrtPtr
{
public:
explicit SmrtPtr(T* obj):ptr(obj)
{
DataBase.add();
for(;;)
{
if(isInvalid())
delete this;
}
}
SmrtPtr(const SmrtPtr<T>& rhs):ptr(rhs.obj){DataBase.add()}
~SmrtPtr(){delete ptr; DataBase.sub()}
T& operator*(){return *ptr;}
T* operator->(){return ptr;}
T** operator&(){return &ptr;}
private:
static SmrtPtrDB<TDataBase;
bool isInvalid()
{
for(;;)
if(!DataBase.status())
return true;
else return false;
}
T* ptr;
};
SmrtPtrDB.hpp
#pragma once
#include "SmrtPtr.hpp"
template<class T>
class SmrtPtrDB
{
public:
SmrtPtrDB():num(0){}
~SmrtPtrDB(){}
void add(){num++;}
void sub(){num--);
int status(){return num;}
private:
int num;
};
Could you help me out on this? I''m not even sure if I''m coding the
non-intrusive reference counting correctly. Thanks!!!!!
在任何
声明之前,您在文件''SmrtPtr.hpp'中使用名称''SmrtPtrDB'。
HTH
You use the name ''SmrtPtrDB'' in file ''SmrtPtr.hpp'' before any
declaration.
HTH
Protoman skrev:
Protoman skrev:
Here''一个非侵入式引用计数智能指针类我是
在工作;我一直得到一个22 C:\Dev-Cpp \SmrtPtr.hpp ISO C ++禁止
声明`SmrtPtrDB''没有类型"错误。
代码:
Here''s a non intrusive reference counting smart pointer class I''m
working on; I keep getting a "22 C:\Dev-Cpp\SmrtPtr.hpp ISO C++ forbids
declaration of `SmrtPtrDB'' with no type" error.
Code:
< snip>
<snip>
>
SmrtPtrDB.hpp
#pragma一次
的#include" SmrtPtr.hpp"
模板<类T>
类SmrtPtrDB
{
public:
SmrtPtrDB():num(0){}
~SmrtPtrDB(){}
void add() {num ++;}
void sub(){num--);
>
SmrtPtrDB.hpp
#pragma once
#include "SmrtPtr.hpp"
template<class T>
class SmrtPtrDB
{
public:
SmrtPtrDB():num(0){}
~SmrtPtrDB(){}
void add(){num++;}
void sub(){num--);
void sub(){num--; }
-
TB @ SWEDEN
void sub() { num--; }
--
TB @ SWEDEN
Protoman写道:
Protoman wrote:
template< class T>
class SmrtPtr
{
public:
explicit SmrtPtr(T * obj):ptr(obj)
{
DataBase.add();
for(;;)
{
if(isInvalid())
删除此内容;
}
}
SmrtPtr(常量SmrtPtr< T>&安培;右):PTR(rhs.obj){DataBase.add()}
〜SmrtPtr(){删除PTR ; DataBase.sub()}
T& operator *(){return * ptr;}
T * operator->(){return ptr;}
T ** operator&(){return& ptr;}
私人:
静态SmrtPtrDB< TDataBase;
bool isInvalid()
{
for(;;)
if(!DataBase.status())
返回true;
else返回false;
}
T * ptr;
};
template<class T>
class SmrtPtr
{
public:
explicit SmrtPtr(T* obj):ptr(obj)
{
DataBase.add();
for(;;)
{
if(isInvalid())
delete this;
}
}
SmrtPtr(const SmrtPtr<T>& rhs):ptr(rhs.obj){DataBase.add()}
~SmrtPtr(){delete ptr; DataBase.sub()}
T& operator*(){return *ptr;}
T* operator->(){return ptr;}
T** operator&(){return &ptr;}
private:
static SmrtPtrDB<TDataBase;
bool isInvalid()
{
for(;;)
if(!DataBase.status())
return true;
else return false;
}
T* ptr;
};
有没有你不使用空格的特别原因是什么?
我纠正了几个小错字。由于您在定义之前使用
SmrtPtrDB,因此会出现错误消息。将两个类放在同一个文件中:
模板< class T>
类SmrtPtrDB {
public:
SmrtPtrDB():num(0){}
~SmrtPtrDB(){}
void add (){num ++; }
void sub(){num--; }
int status(){return num; }
私人:
int num;
};
模板< class T>
类SmrtPtr {
public:
显式SmrtPtr(T * obj )
:ptr(obj)
{
DataBase.add();
for(;;) {
if(isInvalid()){
删除此内容;
}
}
/ *
这个循环应该完成什么?为什么会终止?
* /
}
SmrtPtr(const SmrtPtr< T>&rhs)>
:ptr(rhs.obj)
{
DataBase.add();
}
~SmrtPtr(){
删除ptr;
DataBase.sub();
}
T& operator *(){return * ptr; }
T * operator->(){return ptr; }
T ** operator&(){return& ptr; }
私人:
静态SmrtPtrDB< TDataBase;
/ *
静态的?为什么每个类型都有一个计数器。人们会期望每个对象有一个
计数器。
* /
bool isInvalid()
{
for(;;){
if(!DataBase.status()){
return true;
} else {
返回false;
}
}
/ *
此循环绝不会循环多次。
* /
}
T * ptr;
};
这个智能指针类应该完成什么?
最好
Kai-Uwe Bux
Is there a particular reason that you do not use whitespace?
I corrected several minor typos. Your error message arises since you use
SmrtPtrDB before defining it. Put both classes in the same file:
template<class T>
class SmrtPtrDB{
public:
SmrtPtrDB () :num (0) {}
~SmrtPtrDB () {}
void add() { num++; }
void sub() { num--; }
int status() { return num; }
private:
int num;
};
template<class T>
class SmrtPtr {
public:
explicit SmrtPtr ( T* obj )
: ptr ( obj )
{
DataBase.add() ;
for (;;) {
if ( isInvalid() ) {
delete this;
}
}
/*
What is this loop supposed to accomplish? Why would it terminate?
*/
}
SmrtPtr ( const SmrtPtr<T>& rhs)
:ptr (rhs.obj)
{
DataBase.add();
}
~SmrtPtr() {
delete ptr;
DataBase.sub();
}
T& operator*() { return *ptr; }
T* operator->() { return ptr; }
T** operator&() { return &ptr; }
private:
static SmrtPtrDB<TDataBase;
/*
static? Why do you want to have one counter per type. One would expect a
counter per object.
*/
bool isInvalid()
{
for (;;) {
if (!DataBase.status() ) {
return true;
} else {
return false;
}
}
/*
This loop will never loop more than once.
*/
}
T* ptr;
};
What is this smart-pointer class supposed to accomplish?
Best
Kai-Uwe Bux