从指针到const指针的无效转换

时间:2013-10-20 11:27:52

标签: c++ pointers const

我有以下课程

档案Node.c

std :: vector<NodeConnection*>* Node :: GetConnections() const
{
    const std :: vector <NodeConnection*> * output = &this->connections;
    return output;
}

档案Node.h

class Node {
    private:
        std :: vector <NodeConnection*> connections;
    public:
        std :: vector <NodeConnection*>* GetConnections() const;
};

我正在尝试将vector connections转换为const指针。但是,我一直收到错误

[Error] invalid conversion from 'const std::vector<NodeConnection*>*' to 'std::vector<NodeConnection*>*' [-fpremissive]

我如何将其转换为可以返回的常量指针?

1 个答案:

答案 0 :(得分:2)

这是因为GetConnections标记为const但返回非常量指针。

相反,您应该通过const引用返回值,const指针或(我的建议):

const std::vector<NodeConnection*>& GetConnections() const;

创建成员函数const意味着它不会(实际上不允许)更改任何对象成员变量。当你返回一个非const指针时,调用者可能会改变与函数的constness冲突的返回值。

导致错误的行是return,当你返回一个const指针并且编译器必须将它转换为非const指针时。