可以修改C ​​++中的结构吗?还是有限制?

Nek*_*Nek 0 c++ struct

我有这个类,它有一个两个字符结构和另一个结构的双列表模板

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)

Dav*_*haw 6

C++中的结构是一个类,其成员都是公共的.如果您的作业没有改变您想要的值,那么您不会指定您认为自己的作业.

您的getObj()函数返回结构的副本,而不是对原始的引用.因此,您更新副本中的值,原始保持不变.

通过更改getObj() to 的返回类型T&或添加另一个函数(如果您有其他依赖于行为的代码)来获取对象的引用.