1. ホーム
  2. c++

undefinedc++ と握手: define マクロ定義が、' ' の前にある期待される一次式に合致している。

2022-02-07 01:37:22
<パス

ただ、遭遇したバグや、どう直せばいいかわからない面倒な処理などを記録しておいてください・・・。

#define マクロ定義

先日、ある人が書いたコードを見ていたら、とても賢いことを発見しました。

#include <iostream>
using namespace std;
#define DEBUG false
//various global variables
int main(){
//Omit related operations...

if(DEBUG) cout<<"Related output to see if the code is correct"<<<endl;

//Omit related operations...
return 0;
}


最初、冒頭のマクロ定義に気づかず、ほぼすべての cout は、その前に if(DEBUG) ちょっと戸惑いましたが、これはデバッグ時にある程度の量を出力し、コード実行時には出力しない方法だとわかりました。

そこで、この操作を自分のコードに追加してみました。
しかし、if(DEBUG)を追加した箇所全てにおいて、以下のエラーが報告されました。

 error: expected primary-expression before ')' token
         if(DEBUG) outfile3d<<Pvec[i].transpose()<<endl;
                     ^


<イグ
どのように4つのああを脂肪する?
グー・ドッグ・ノー、アウト・オブ・ザ 最初の1枚 はこれです。
彼はクラスとオブジェクトを混同しており、クラスのメンバー関数の定義では、クラスではなくデータメンバーを使用します+。 . 演算子で、オブジェクトのデータメンバにアクセスする方法です(大雑把で、読み方が正しいかどうか分かりませんが)。
OK、見てみると、どこが間違っているのかわからない・・・。
人の手を加えることで if(DEBUG) のコードを注意深く見ていくと、問題が見つかりました(ちょうどガチンコ勝負のようなデバッグをしています)。

マクロの定義がセミコロン文字なしになっている

マクロ定義はセミコロンなし

マクロの定義はセミコロンなし

マクロの定義はセミコロンなし

と書き、それを

#define DEBUG false;

お腹を押さえる

握手花