2017-04-04 14 views
0

"C2440:" '=': 'const FDHNode *'から 'FDHNode *'に変換できず、私の人生のためには理解できません。問題が明らかにから来ている状態エラーC2440: "t = ':' const FDHNode <ItemType> * 'から' FDHNode <ItemType> * ''に変換できません。

template<class ItemType> 
class FDHNode 
{ 
    private: 
    ItemType coeff; //Data item representing coefficient 
    ItemType expon; //Data item representing exponent 
    FDHNode<ItemType>* next; //Pointer to a next node 
    public: 
    FDHNode(); 
    FDHNode(const ItemType& coeffi, const ItemType& expone); 
    FDHNode(const ItemType& coeffi, FDHNode<ItemType>* nextNodePtr); 
    void setCoeffi(const ItemType& aCoeffi); 
    void setExpon(const ItemType& anExpon); 
    void setNext(const FDHNode<ItemType>* NEXTPTR); 
    ItemType getCoeffi(); 
    ItemType getExpon(); 
    FDHNode<ItemType>* getNext(); 

    void print(); 


}; 

template<class ItemType> 
void FDHNode<ItemType>::setNext(const FDHNode<ItemType>* NEXTPTR) 
{ 
    next = NEXTPTR; 
} 
+0

のように変更します。

次の例のように、それnon-const作るためにconst_castを使用することができますそれを非constポインタに割り当てる必要があります。それは後でconstであるものを修正することができるので、うまくいきません。 –

+0

どうすればこの問題を解決するとお考えでしょうか?私は次のノードを指すようにNodeクラスの関数を定義しようとしています。 @BoPersson – Student1860

答えて

2

変数nextそうように定義されています。

FDHNode<ItemType>* next; //Pointer to a next node 

、変数NEXTPTRをそうように定義されています

const FDHNode<ItemType>* NEXTPTR 

追加されたconstは、それが変更できないという意味で重要な意味を持ちます。 NEXTPTRnextに割り当てると、nextは変更できますが、NEXTPTRは定数なので問題になります。特定の物事に応じて、これは解決することができた2つの方法があります

  1. nextポインタが実際に変更される可能性が何かがある場合は、そのNEXTPTRなどの定義を変更する必要がありますそれはconstではありません。これを行うと、関数の宣言は次のようになります。void FDHNode<ItemType>::setNext(FDHNode<ItemType>* NEXTPTR)
  2. パラメータが実際に定数である場合、next変数をconstとして定義する必要があります。これと同じように:const FDHNode<ItemType>* next;

注:変数のconst -nessを離れ唱えられるconst_cast<>あります。しかし、あなたがこの質問に対する答えを知らなかったなら、そのような場合にはそれ以上の害を及ぼす可能性があるので、ここでキャストする必要はないでしょう。

+0

ありがとう!あなたの最初の提案されたソリューションは、それがconstではないようにすることで完璧に動作 – Student1860

+0

@FrancisHeroux私はそれがうまく働いてうれしく、さらに重要なことに、あなたがその問題を理解したことを願っています。 –

+0

私はそれを指摘したら、私が自分自身と矛盾していたことは辛抱強く明らかでした。 – Student1860

1

それはNEXTPTRFDHNode<ItemType>*あるconst FDHNode<ItemType>*nextながら、あなたはFDHNode<ItemType>*const FDHNode<ItemType>*を割り当てることはできませんで、エラーでは非常に明確で言われています。

FDHNode<ItemType>* non_const_next = const_cast<FDHNode<ItemType>*>(NEXTPTR); 

をし、それを行うための最善の方法は、setNext()のパラメータを変更することで、あなたはのconstポインタを持ってFDHNode<ItemType>* NEXTPTR

関連する問題