私は非常に単純なことを達成しようとしています。クラスのインスタンスが作成されるとき、つまりコンストラクタを呼び出すときに、クラスの保護されたconstメンバを初期化する必要があります。このような何か:クラスコンストラクタで保護されたconstを初期化する
MyClass.hpp:
class MyClass {
public:
//some methods
MyClass(){} //Constructor
protected:
const int Variable;
};
MyClass.cpp:
//some method definitions
MyClass::MyClass(int newVariable): Variable(newVariable) {} //constructor
私は、それぞれが独自の多かれ少なかれ啓発コンパイラエラーを与え、static
キーワードや他のものを試してきました。この例では、「コピー代入演算子は暗黙的に削除されています。
これは、メンバーを保護し始めてから、すべてが正常に機能していたので、むしろイライラしています。
補足:一度定義したconst
メンバを変更できない場合は、保護とgetter/setterメソッドの作成はまだ必要ですか?
編集2最後の部分は、.cppファイルに
ある
#ifndef Servo_hpp
#define Servo_hpp
#pragma once
class Servo{
friend class Grid;
public:
Servo(int newID, int newRow, int newCol);
//Some other methods
const int row;
const int column;
const int number;
double currentAngle;
double nextAngle;
double currentSpeed;
const int ID; //TODO: Change to new grid
};
#endif /* Servo_hpp */
Servo::Servo (int newID, int newRow, int newCol): ID(newID), column(newCol), row(newRow), currentAngle(0), currentSpeed(0), number(0){}
:関連するコード:それは本当に...
EDITを開発をスピードアップしません。 MyClassのベクター配列を作成しようとすると問題が発生します。
std::vector<MyClass> MyClassArray;
for (int Variable = 0; Variable < 5; Variable++) {
MyClassArray.push_back(*new MyClass(Variable));
}
}
上記のクラス定義と共にこのコードを書いた場合、これはg ++で正常に準拠しますが、XCodeは "オブジェクトの型 'MyClass'を暗黙的に削除するため、割り当てできません。問題を理解することができます:constメンバーを割り当てることはできませんが、どこでもMyClassをコピーしませんか?
だから、実際の問題は何ですか?エラーメッセージはかなり簡単です。 *コピー代入演算子は暗黙的に削除されます。*これは、 '変数 'を変更できないので、既に作成された' Myclass'に 'Myclass'を割り当てることはできません。 – NathanOliver
ありがとう、根本的な問題は:MyClassのインスタンスが作成されたときに 'Variable'を特定の値に設定してから、その値がそのインスタンスの生存期間同じであることを確認してください。 – chris1992
です。だから、実際にどのようなコードを使っているのですか?もしあなたが*この値が生存している限り、そのインスタンスのために同じままであることを確認したいなら、あなたは 'Myclass a {42}、b {50};を実行できません。 a = b; ' – NathanOliver