我有这个类,它有一个两个字符结构和另一个结构的双列表模板
typedef struct KeyC{
char K[5];
char C[9];
} TKeyC;
typedef struct Bin{
char Car;
char Cad[9];
TKeyC *KC;
} TBin;
class Bo {
private:
TDoubleList<TBin> *Ent;
public:
...
}
Run Code Online (Sandbox Code Playgroud)
我有一个创建节点的方法.没问题,但是当我调用其他方法来修改指向新TKeyC结构的指针的方向时,这根本不会发生.
TNode<TBin> *Aux;
TKeyC *AuxKC=new TKeyC;
Aux->getObj().KC=AuxKC;
Run Code Online (Sandbox Code Playgroud)
在这种情况下,我是否必须使用类而不是结构,或者是结构问题还是存在错误?
更新
template <class T>
class TNode
{
private:
T TObj;
TNode<T> *Prev,*Next;
public:
TNode();
~TNode();
TNode(T);
void setObj(T);
void sPrev(TNode<T>*);
void sNext(TNode<T>*);
T getObj();
TNode<T>* gPrev();
TNode<T>* gNext();
};
Run Code Online (Sandbox Code Playgroud)
方法getObj:
template <class T>
T TNode<T>::getObj() {return(TObj);};
Run Code Online (Sandbox Code Playgroud)
C++中的结构是一个类,其成员都是公共的.如果您的作业没有改变您想要的值,那么您不会指定您认为自己的作业.
您的getObj()函数返回结构的副本,而不是对原始的引用.因此,您更新副本中的值,原始保持不变.
通过更改getObj() to 的返回类型T&或添加另一个函数(如果您有其他依赖于行为的代码)来获取对象的引用.