-1

答えを探してみましたが見つかりませんでした。私はC++を初めて使用するため、ポインターはまだ直感的ではありません。

mainGUIのボタンがクリックされたときに実行されるその他の個別の機能を備えたプログラムがあります。

コンパイル時に、ポインタが宣言されていないことを示すクリックボタン関数からエラーが発生します。スコープの問題であることはわかっていますが、これに対処する方法がわかりません。非常に簡単な答えだとは思いますが、オンラインで見つけることができないようです。アクセスする適切な方法を教えてください。

int main () {
...
Contract contract;
contract.firstvalue = 1 // various variables that need to be set for this class
contract.secondvalue = 2 // various variables that need to be set for this class

Contract *pointer = &contract; //pointer
...
}

ボタンをクリックする

void clickbutton(){
//clicking a button should change the contract values
pointer.firstvalue = 5;
}

void clickbutton2(){
//clicking a button should change the contract values
pointer.secondvalue = 10;
}

編集:申し分なく、私は私が間違ったことをしたことがわかります。'firstvalue'と'secondvalue'を設定できなかったため、mainの外で宣言することについて混乱しました。ただし、それらをmainに設定し、mainの外部で変数を宣言することはできます。その場合、ポインタは必要ありません。混乱を引き起こした恐ろしいコードに感謝し、申し訳ありません。

4

3 に答える 3

2

ボタンのコードが同じスコープ内にある場合に限り、main()の外部でこれらの変数を宣言します。それ以外の場合は、静的として宣言しますが、それが何をするかを見てください。

于 2013-01-06T20:20:27.013 に答える
2

更新:わかりました。元のエラーを修正clickbutton()したので、エラーが発生する理由は、pointer変数がスコープ内にないためです。

次のようなものが必要になります。

void clickbutton(Contract *pointer){
  //clicking a button should change the contract values
  pointer->firstvalue = 5;
}

または、コントラクトがグローバルオブジェクト(常に存在する)である場合は、

Contract *pointer;
void clickbutton() {
  pointer->firstvalue = 5;
}
int main() {
  Contract c;
  pointer = &c;
  clickbutton();
}

しかし、これはおそらくあなたが望むものではありません。

于 2013-01-06T20:20:42.337 に答える
1

関数を変更して、パラメーターとして使用するポインターを取得するようにする必要があります。グローバル変数を使用しているようですが、可能であれば回避する必要があります。オブジェクトを(以下のように)渡すことは、はるかに優れたアイデアです。ポインタを扱っているので->、ドット演算子ではなく矢印演算子を使用していることに注意してください。.

void clickbutton(Contract *pointer) {
    //clicking a button should change the contract values
    pointer->firstvalue = 5;
}

void clickbutton2(Contract *pointer) {
    //clicking a button should change the contract values
    pointer->secondvalue = 10;
}
于 2013-01-06T20:25:42.493 に答える