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);
}

所以本质上是:

-更改classtypedef struct

- 在参数中,将 newtype 替换为void *something

-添加person *x;x = (person *)ptr;到函数的开头

- 每当访问类型属性时,使用->而不是.

于 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 回答
0

我的猜测是,您在“类人...”上方的声明中的某处有一个无效的语法错误。你能复制并粘贴整个文件吗?

于 2013-08-18T23:13:23.077 回答