2017-07-13 10 views
-5

今日私はC++でswitch文を使用するさまざまな形式を学習しテストしていました。 私はこのコードを書いて、2つがケースであり、1つが比較文字(メイン入力)である3つの文字を入力できるようにする関数を作成しました。 の場合は変数を使用できないため、ポインタを使用することにしましたが、私のアプローチはうまくいかず、理由がわかりません。ポインタを使用している原因は、実際には既に定義されているアドレスの値を指していることを意味します。スイッチの機能とポインタ(コード参照)

これがエラーである:


[Error] 'iloc' cannot appear in a constant-expression 
[Error] '*' cannot appear in a constant-expression 

これはコードである:

#include <iostream> 

using std::cout; 
using std::cin; 

void switch_function(char i, char j, char c){ 

//inputing values by the user 

cout <<"Insert i(char): "; 
cin >> i; 
cout <<"Insert j(char): "; 
cin >> j; 
cout <<"Insert c(char) "<< i <<" Or "<< j <<": "; 
cin >> c; 

//declaring pointers 

char * iloc; 
char * jloc; 
char * cloc; 

//registering memory adresses 

iloc = &i; 
jloc = &j; 
cloc = &c; 

//switch function 

switch(*cloc){ 

    case *iloc: 

     cout << i; 
     break; 

    case *jloc: 

     cout << j; 
     break; 
    } 
    } 

int main(){ 

//s and f characters are the cases and the third f is the main user input. 

switch_function('s', 'f', 'f'); 

cout <<"\n"; 

int location; 
int * target; 

target = &location; 
cout << &location; 
cout <<"\n"<< target + 1; 
} 
+4

おそらく、「機能しませんでした」とは、コンパイラから何か問題があったと言われたことを意味します。エラーメッセージを注意深く読んでください。それが何を意味するのか理解できない場合は、それをあなたの質問に含めてください。 –

+2

あなたも私たちと分かち合っていますか?*** "スイッチクラス" ***どうぞ! –

+0

申し訳ありませんが、私の悪い。あなたはこれについて何か言いたいことはありますか? @ΦXocen웃いepepeúpaツ –

答えて

1

case *iloc:はできません。 caseは、コンパイル時に既知の定数のみを受け入れます。この場合、代わりにif/else ifを使用してください。

+0

ありがとうございます。しかし、ポインタを使用すると、 switch文が実行される前に定義されている値(定数があるので定数です!)に移動しますか? @IlBeldus –

+1

@NotGreenそうではありません。あなた自身に尋ねる必要があるのは、「自分のプログラムをコンパイルすると、コンパイラは '* iloc'の価値を知ることができますか?答えが「いいえ」の場合、それは「ケース」状態にあることはできません。技術的な説明については、https://stackoverflow.com/a/10965360/4124855 – IlBeldus

+0

@NotGreenを参照してください。大文字小文字は文字列では機能しませんが、ilocは変更可能な「const」ではありません。変更できる場合は、コンパイル時に定数ではありません。 – UKMonkey

関連する問題