2016-02-29 3 views
0

В следующем коде компилятор avr-g ++ (Arduino IDE) выдает ошибку: 'ControllerPosition' does not name a type. В чем проблема с кодом?'ControllerPosition' не называет тип

struct ControllerPosition 
{ 
    int y, x; 

    ControllerPosition(int _y = 0x7FFF, int _x = 0x7FFF) : y(_y), x(_x) {} 
}; 

ControllerPosition mapPosition(int input) 
{ 
    return ControllerPosition((input % 10) * 2 + 1, (input/10) * 2 + 1); 
} 
+0

[Ваша проблема в другом замке.] (Http://coliru.stacked-crooked.com/a/f3d95a2e969d9f59) Уверены, что вы не пропустите включенные заявления или что-то еще? –

+0

Какая строка относится к сообщению об ошибке? –

+0

Да. Если вы вставьте этот документ в простой документ из Arduino IDE, он не будет компилироваться должным образом. – Highace2

ответ

0

Я не уверен, что есть проблема с кодом публикуемым. Следующие работы для меня:

struct ControllerPosition { 
    int y,x; 

    ControllerPosition(int _y = 0x7FFF,int _x = 0x7FFF) : y(_y),x(_x) {} 
}; 

ControllerPosition mapPosition(int input) 
{ 
    return ControllerPosition((input % 10) * 2 + 1,(input/10) * 2 + 1); 
} 

int main() 
{ 
    auto testvar = mapPosition(4); 
    return 0; 
} 

Посмотрите на this post обсуждали подобную ошибку в более общих терминах.

+0

Используете ли вы компилятор avr-g ++? – Highace2

+0

Нет, я использовал MSVC. Я добавил ссылку на более общий ответ, характерный для Arduino. – wally

0

Я нашел источник проблемы. Arduino IDE обнаруживает, что функции в данном файле помещают прототипы из них в начале файла, а это означает, что он ставит прототипы перед определением структуры, а функция использует структуру как возвращаемый тип. Поэтому решение заключалось в том, чтобы явно объявить прототипы после определения структуры.

т.е.

struct ControllerPosition 
{ 
    int y; 
    int x; 
}; 

ControllerPosition mapPosition(int input); 

ControllerPosition mapPosition(int input) 
{ 
    return ControllerPosition((input % 10) * 2 + 1, (input/10) * 2 + 1); 
} 

PS: Можно объявить прототипы до проведения структуры, сделав класс вперед декларацию struct ControllerPosition;.