web-dev-qa-db-ja.com

数値を定義するための数値定数の前にunqualified-idが必要です

私はC++が初めてなので、phidget-codeの例でこのエラーが何を意味するのかわかりません。

Main.cpp:8:16:エラー:数値定数の前にunqualified-idが必要です

//verander de volgende informatie naar de informatie voor jouw database

#define dserver "oege.ie.hva.nl"
#define duser "username"
#define dpassword "password"
#define ddatabase "databasename"

#define homeid 1234 //line 8

構文エラーはありますか?または、他の何か? intではなく#defineを使用します。

編集:完全なエラーログを追加しました。

完全なエラーログ: http://Pastebin.com/3vtbzmXD

完全なmain.cppコード: http://Pastebin.com/SDTz8vni

22
Kil'jaeden

完全なエラーは

error: expected unqualified-id before numeric constant
 note: in expansion of macro ‘homeid’
string homeid;
       ^

マクロと同じ名前の変数を宣言しようとしていますが、それはできません。プリプロセッサはすでにプログラムを踏みつけ、それをstring 1234;に変換していますが、これは有効な宣言ではありません。プリプロセッサにはプログラム構造の知識がなく、マクロは言語のスコープルールに従いません。

可能な場合は、マクロではなく定数やインライン関数などの言語機能を使用します。この場合、使用するかもしれません

const int homeid = 1234;

これは、グローバルネームスペースでスコープされ、狭いスコープ内の同じ名前の何かによって安全に非表示にできます。非表示の場合でも、::homeidとして常に使用可能です。

マクロが本当に必要なときは、マクロにSHOUTY_CAPSを使用する規則に従うのが賢明です。マクロの使用に関連する潜在的な危険性と奇妙性に注意を引くだけでなく、他の大文字を使用した名前と衝突することもありません。

22
Mike Seymour

その行は結構です。

最も起こりそうなことは、コンパイラがマクロ定義自体についてではなく、マクロのseについて不平を言っていることです。例:

#define homeid 1234

void homeid() {
}

GCCでこれをコンパイルすると、次の結果が得られます。

 so.cc:1:16:エラー:数値定数の前にunqualified-idが必要です
 #define homeid 1234 
 ^ 
 so.cc:3:6:注:マクロ 'homeid' 
 void homeid(){
 ^ 
の展開

これは、苦情を促す数値定数がマクロ定義の一部であるだけでなく、そのマクロが3行目でsed(この場合は偶然によるもの)であることも示しています。拡張はコード内から行われます。

8
user743382