1

C++ で単純なクラスを作成しようとしていますが、コンパイル エラーが発生し続けます。

main:2: error: variable or field 'doSomething' declared void
main:2: error: 'person' was not declared in this scope

主要:

class person {
  public:
    int a;
};

void doSomething(person joe) {
  return;
}

main() などはここに配置されますが、main(){} を含めてもエラーが発生します。また、joe の後に閉じ括弧を 2 つ追加しようとしましたが、エラーが発生します。

main: In function 'void doSomething(person (*)())':
main:8: error: request for member 'a' in 'joe', which is of non-class type 'person (*)()'

どんな助けでも大歓迎です。(私は何時間も研究してきたので、これが私が見逃している本当にばかげたものではないことを願っています).

編集:これはArduino固有のエラーであることがわかりました。この投稿はそれに答えます。

4

3 に答える 3

2

この投稿を読んだ後、これを回避する方法は次のとおりであることがわかりました。

typedef struct person{
public:
    int a;
};

void doSomething(void *ptr)
{  
    person *x;
    joe = (person *)ptr;
    joe->a = 3; //To set a to 3
    //Everything else is normal, except changing any value of person uses "->" rather than "."

    return;
}

main()
{
    person larry;
    doSomething(&larry);
}

したがって、本質的には次のとおりです。

-classに変更typedef struct

- パラメータで、newtype を次のように置き換えますvoid *something

-関数の先頭にperson *x;andを追加x = (person *)ptr;

- type プロパティにアクセスするときは常に->.

于 2013-08-18T23:37:03.740 に答える
1

私は専門家ではありませんが、あなたがやりたいことをやろうとするときは、次のようにします。

//create an instance of my class
MyAwesomeClass myObject;

void myFunction(MyAwesomeClass& object){
    //do what you want here using "object"
    object.doSomething();
    object.doSomethingElse();
}

void setup() {
    //setup stuff here
    myObject.init();
}

void loop() {
    //call myFunction this way
    myFunction(myObject);
}

私が言ったように、私は C++ の専門家ではありませんが、仕事はします。それが役に立てば幸い!

于 2013-08-19T06:46:24.097 に答える