获取类变量的错误值 我对C++很陌生。实际上,我正在把代码从C语言转换成C++。我的代码的问题是,我得到某个类变量的默认值,即使我已经将其设置为其他值。部分代码如下。请帮忙。节点和单元是类 node nodes [10]; cell cells [10][10]; for (i = 0; i < n; i++) for (j = 0; j < n; j++) { cell c1; cells[i][j] = c1; } // mapping nodes to cells for (i = 0; i < N; i++) { nodes[i] = node(i); // depending upon some x and y, nodes are assigned to appropriate cells. cellNodeCount = cells[x][y].appendNode(nodes[i]); }

获取类变量的错误值 我对C++很陌生。实际上,我正在把代码从C语言转换成C++。我的代码的问题是,我得到某个类变量的默认值,即使我已经将其设置为其他值。部分代码如下。请帮忙。节点和单元是类 node nodes [10]; cell cells [10][10]; for (i = 0; i < n; i++) for (j = 0; j < n; j++) { cell c1; cells[i][j] = c1; } // mapping nodes to cells for (i = 0; i < N; i++) { nodes[i] = node(i); // depending upon some x and y, nodes are assigned to appropriate cells. cellNodeCount = cells[x][y].appendNode(nodes[i]); },c++,class,C++,Class,下面是包含getNodeList()函数的cell类 class cell { private: vector<node> nodeList; public: int appendNode(node nod) { nodeList.push_back(nod); return nodeList.size(); } vector<node> get

下面是包含
getNodeList()
函数的cell类

class cell
{
private:        
vector<node> nodeList;

public:

    int appendNode(node nod)
    {            
        nodeList.push_back(nod);           
        return nodeList.size();
    }



vector<node> getNodeList()
    {
        return nodeList;
    }

    int cellNodeCount()
    {
        return nodeList.size();
    }       

};
类单元
{
私人:
向量节点列表;
公众:
int appendNode(节点节点)
{            
节点列表。向后推(nod);
返回nodeList.size();
}
向量getNodeList()
{
返回节点列表;
}
int cellNodeCount()
{
返回nodeList.size();
}       
};

一个猜测,但我只想到一个答案。当您设置节点标志时,您是在节点的副本上设置它,而不是在您认为正在设置它的原始节点上。记住C++和C++之间的巨大区别。在C#中,类变量是对底层对象的引用,当您分配变量时,您复制的是引用而不是对象。在C++中,相反的情况是正确的,你的类变量是实际的对象,当你把一个变量分配给另一个时,你是在复制实际的对象。这有时被称为值语义(C++)与引用语义(C#和Java)


如何修复它是不可能的说,从代码你已经张贴。但是您需要对指针或引用进行一些操作。可能您的方法
getNodeList
正在复制节点列表,而不是返回对现有节点列表的引用。

这些循环看起来可能会产生问题:

for (i = 0; i < n; i++)
    for (j = 0; j < n; j++)
    {
        cell c1;                    
        cells[i][j] = c1;
    }   
(i=0;i 对于(j=0;j
虽然不显示
n
的值,但对两个循环都使用它。这意味着,如果
n
为10(
单元格
数组的外部尺寸),则您将访问
单元格[i][j]
。您也可以在另一个嵌套循环中使用它。

我建议交叉检查double for循环,这可能会产生问题。

是否返回副本?如果是,那可能就是问题的原因。是的,您已经正确地识别了问题。但是我对C++是新手,对指针和引用没有太多的了解。如何使用指针设置nodeflag,以便更新实际标志而不是副本?您需要的不是nodeflag的指针/引用,而是对其包含对象的指针/引用。它是您希望避免在代码的某个关键点复制的包含对象。但是在没有看到所有代码的情况下,很难给出具体的建议。您是否查看了
getNodeList
方法?也许你应该在这里发布代码。@john我已经用
getNodeList
方法发布了cell类。这是你的问题,你返回了一个节点列表的副本,然后对节点列表的副本进行操作,而原始的没有改变。这个小小的更改将修复它,
vector&getNodeList()
。但是请注意,尽管返回对节点列表的引用可以修复此特定问题,但这是对代码的更改,如果在代码的其他地方使用此方法,则可能会破坏(或修复)该代码。我没办法告诉你。基本上,C++需要了解复制对象和复制引用或指向对象的指针之间的区别。@杜奕衡,在GETNODILISTIVE()方法的调用端或普通向量变量中,需要任何特殊变量(例如指针变量)。我仍然得到相同的问题,即使在作出上述修复。
class cell
{
private:        
vector<node> nodeList;

public:

    int appendNode(node nod)
    {            
        nodeList.push_back(nod);           
        return nodeList.size();
    }



vector<node> getNodeList()
    {
        return nodeList;
    }

    int cellNodeCount()
    {
        return nodeList.size();
    }       

};
for (i = 0; i < n; i++)
    for (j = 0; j < n; j++)
    {
        cell c1;                    
        cells[i][j] = c1;
    }