& quot; выражение должно иметь тип класса & quot; ошибка

Я работаю над своим маленьким сенсорным кодом для встроенного микроконтроллера. Мой код работал с использованием функций. Но теперь я хочу сделать это в классе. Я получаю ошибку:

выражение должно иметь тип класса.

И я не знаю, в чем проблема. Я погуглил мою проблему, и никакого ясного решения не было найдено. Вот мой код:

main.cpp

#include "screen.h"#include "mbed.h"#include "stdio.h"
screen test();

int main(void)
{

while (1)
{
test.button(50,70,100,50,"button1"); // line where the compiler sees an error
}
}

screen.h

class screen{

public:

screen();

void init();
void button(int, int, int, int, string);

private:
int runningstatus; // 0 = stopped // 1 = failure // 2 = running
point p;};

screen.cpp

#include "screen.h"
touch_tft TFT(p20,p18,p17,p16,p5, p6, p7, p8, p15,"TFT"); // x+,x-,y+,y-,mosi, miso, sclk, cs, resetscreen::screen(){}

void screen::init()
{
TFT.claim(stdout);          // send stdout to the TFT display
TFT.background(Black);    // set background to black
TFT.foreground(White);    // set chars to white
TFT.cls();                // clear the screen
TFT.set_orientation(3);
TFT.set_font((unsigned char*) Arial24x23);
TFT.locate(60, 100);
}

void screen::button(int x0, int y0, int length, int height, string caption)
{
TFT.rect(x0     ,y0     ,x0+length      ,y0+height,     LightGrey);
TFT.rect(x0-1   ,y0-1   ,x0+length+1    ,y0+height+1, LightGrey);
TFT.fillrect(x0-2,y0-2 ,x0+length-1 ,y0+height-1, Navy);

TFT.locate(x0+10, y0+10);

TFT.background(Navy);
TFT.printf("%s", caption);
}

Может кто-нибудь сказать мне, в чем проблема с этим кодом. Это сводит меня с ума!

1

Решение

Вам нужно изменить: screen test(); в screen test;, Как сейчас, вы объявляете функцию с именем test который возвращает screen, не определяя объект с именем test типа screen,

Это довольно хорошо известно как «самый неприятный синтаксический анализ» в C ++ (хороший термин для поиска, если вам нужна дополнительная информация).

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]