エラー C2678 解答
UE4使用時に発生
error C2678: binary '==' : type 'const HUDMessage ' の左側のオペランドを取る演算子が見つからない(または許容できる変換がない)。
最終的にはここに位置することができます
int32 Find(const ElementType& Item) const
{
const ElementType* RESTRICT Start = GetData();
for (const ElementType* RESTRICT Data = Start, *RESTRICT DataEnd = Data + ArrayNum; Data ! = DataEnd; ++Data)
{
if (*Data == Item)//here
{
return static_cast<int32>(Data - Start);
}
}
return INDEX_NONE;
}
見ての通り、TArrayのFindメソッドを使用しているためですが、TArrayに格納されているカスタムタイプHUDMessageは==演算子をオーバーロードしていないため、*Data == Itemでは指定した演算子のオーバーロードを見つけることができません。そこで、追加します。
bool HUDMessage::operator == (const HUDMessage& a)
{
return this->text.ToString() == a.text.ToString();
}
その結果、やはりエラーが報告されました...。
最後に、もう一度エラーメッセージをよく読んでみると
左側のオペランドが 'const HUDMessage' 型の場合
この文では、受け入れたオペランドがconst HUDMessageであることに言及しているので、文脈からわかるようにDataがconst型であることが明らかになり、今回コンパイラは、左オペランドが通常の変数で右オペランドがconstである演算子==ではなく、左と右がともにconstである演算子を探してオーバーロードしました。 ==. だから解決策は2つあります。
1. const 修飾子で関数をオーバーロードすると、コンパイル時に追加された this ポインタが const になり、つまり左オペランドが const になります。
bool HUDMessage::operator == (const HUDMessage& a)const
{
return this->text.ToString() == a.text.ToString();
}
2. 対応する演算子の直接グローバルオーバーローディング
bool operator ==(const HUDMessage& a,const HUDMessage& b)
{
return a.text.ToString() == b.text;
}
しかし、ヘッダーファイルのインクルード順のため、メソッド2は常に再定義されるため、メソッド1が選ばれ、コンパイルされることになります。
この問題は、やはりエラーを注意深く見るべきだということを教えてくれています。
関連
-
[解決済み】演算子のオーバーロード C++; <<操作のパラメータが多すぎる
-
[解決済み] VC++の致命的なエラー LNK1168: 書き込みのために filename.exe を開くことができない
-
[解決済み] こんなエラーが出るんです。"glibc detected"
-
[解決済み] C++のクラスを使用したアーキテクチャx86_64の未定義シンボル
-
[解決済み] デバッグエラー -Abort() Has Been Called
-
[解決済み] cin.get()が動作しない
-
[解決済み] コンパイル時の非互換ライブラリのスキップ
-
[解決済み] exc_bad_access エラー
-
[解決済み] 非メンバー関数での 'this' の無効な使用
-
[解決済み] コンパイルエラー - 配列の添え字の型が 'char[int]' でない。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Visual Studio 2015で「非標準の構文。'&'を使用してメンバーへのポインターを作成します」エラー
-
[解決済み】C++コンパイルタイムエラー:数値定数の前に期待される識別子
-
[解決済み】警告 - 符号付き整数式と符号なし整数式の比較
-
[解決済み】C++エラー:'clock_gettime'と'clock_settime'への未定義の参照
-
[解決済み] 4294967295(32bitでの最高値)はなぜ-1になるのですか?
-
[解決済み] setprecision() が期待通りに動作しない
-
[解決済み] プロジェクトのコンパイルに失敗し、io.h ファイルが見つからない
-
[解決済み] リンクリストにおける代入演算子 C++
-
[解決済み] GetKeyState() の使用法
-
Dev c++でId returned 1 exit statusコンパイルエラーが発生した場合、どうすればよいですか?