智能指针帮助 [英] Smart Pointer help

查看:92
本文介绍了智能指针帮助的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

这是一个非侵入式引用计数智能指针类我是

正在处理;我一直得到一个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


这篇关于智能指针帮助的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆