Ошибка ожидаемый неквалифицированный идентификатор перед токеном

У меня проблемы с решением неизвестной проблемы, с которой я никогда не сталкивался на Arduino Nano (ATmega328). Я создаю исходный код дрона, и у него все хорошо. Но в Arduino IDE неожиданно появились ошибки.
Очевидно, я новичок в программировании. Так что помогите мне узнать, как решить эту проблему.

Я получил такие ошибки:

error: expected unqualified-id before '[' token

error: 'value' does not name a type

Quadcopter_Code_Arduino:580: error: expected unqualified-id
before '[' token

struct op[]

^

Quadcopter_Code_Arduino:589: error: 'value' does not name a type

} value;

^
typedef union accel_t_gyro_union
{
struct
{
uint8_t x_accel_h;
uint8_t x_accel_l;
uint8_t y_accel_h;
uint8_t y_accel_l;
uint8_t z_accel_h;
uint8_t z_accel_l;
uint8_t t_h;
uint8_t t_l;
uint8_t x_gyro_h;
uint8_t x_gyro_l;
uint8_t y_gyro_h;
uint8_t y_gyro_l;
uint8_t z_gyro_h;
uint8_t z_gyro_l;
} reg;
struct op[]
{
int x_accel;
int y_accel;
int z_accel;
int temperature;
int x_gyro;
int y_gyro;
int z_gyro;
} value;

};

1

Решение

Определение / Информация:

От http://en.cppreference.com/w/cpp/language/union

Объединение — это специальный тип класса, который может содержать только один из
Нестатические члены данных одновременно.

А также

Объединение настолько велико, насколько необходимо, чтобы вместить самого большого члена данных.
Другие члены данных размещаются в тех же байтах как часть этого
самый большой член.

Также:

Ваша декларация неверна и должна быть:

struct op
{
int x_accel;
int y_accel;
int z_accel;
int temperature;
int x_gyro;
int y_gyro;
int z_gyro;
} value [SIZE];

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

(Хотя с пустыми скобками он все еще компилируется и работает в моем быстром тестировании … Я тоже должен разобраться в этом поведении.: D)

Решение:

Используйте исправленную декларацию выше.

Совет:
Используйте РАЗМЕР для массива в скобках.
Если вы еще не знаете размер, используйте указатель по причинам, указанным выше.

1

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

struct op[] {} ерунда в любом случае. Если ты хочешь struct тип по имени op, он должен быть за пределами объединения (но это не проблема, может быть проблема с его использованием где-то еще):

struct A {
uint8_t  low_byte; // depends on byte order
uint8_t high_byte;
};

struct B {
int          word;
};

union U {
A  reg;
B  val;
} variable;

Но нет необходимости в массиве вообще. Итак, второе struct должен быть также анонимным:

union accel_t_gyro_union
{
struct
{
uint8_t x_accel_h;
uint8_t x_accel_l;
uint8_t y_accel_h;
uint8_t y_accel_l;
uint8_t z_accel_h;
uint8_t z_accel_l;
uint8_t t_h;
uint8_t t_l;
uint8_t x_gyro_h;
uint8_t x_gyro_l;
uint8_t y_gyro_h;
uint8_t y_gyro_l;
uint8_t z_gyro_h;
uint8_t z_gyro_l;
} reg;
struct
{
int x_accel;
int y_accel;
int z_accel;
int temperature;
int x_gyro;
int y_gyro;
int z_gyro;
} value;
};

1

struct op[] {} выглядит странно для меня. (Я даже не знаю, как читать / интерпретировать это.)

Таким образом, я протестировал это с помощью gcc на cygwin (в упрощенной версии):

$ gcc --version
gcc (GCC) 5.4.0

$ echo 'typedef union u { struct op[] { int i; } value; };
> int main() { return 0; }
> ' > test-weird-union.c

$ gcc test-weird-union.c
test-weird-union.c:1:28: error: expected identifier or '(' before '[' token
typedef union u { struct op[] { int i; } value; };
^
test-weird-union.c:1:42: error: expected ';' before 'value'
typedef union u { struct op[] { int i; } value; };
^
test-weird-union.c:1:42: warning: useless storage class specifier in empty declaration

(Тот же вывод с gcc -std=c11.)

Код, вероятно, неправильный или, по крайней мере, не стандартный C.

ХОРОШО. Думая дополнительно об этом: как это исправить?

Немного больше фона было бы неплохо. Таким образом, рассмотрим это как подход и докажем, как его применять:

#include <stdint.h>

typedef union accel_t_gyro_union
{
struct
{
uint8_t x_accel_h;
uint8_t x_accel_l;
uint8_t y_accel_h;
uint8_t y_accel_l;
uint8_t z_accel_h;
uint8_t z_accel_l;
uint8_t t_h;
uint8_t t_l;
uint8_t x_gyro_h;
uint8_t x_gyro_l;
uint8_t y_gyro_h;
uint8_t y_gyro_l;
uint8_t z_gyro_h;
uint8_t z_gyro_l;
} reg;
struct op
{
int16_t x_accel;
int16_t y_accel;
int16_t z_accel;
int16_t temperature;
int16_t x_gyro;
int16_t y_gyro;
int16_t z_gyro;
} value;
} accel_t_gyro_union;

Следующие вещи, которые я сделал:

  1. Удалил [] позади op исправить синтаксическую ошибку.

  2. Изменил int в int16_t, Это гарантирует, что этот код работает и на не 16-битных платформах.

  3. добавленной accel_t_gyro_union до конца typedef, Это может не быть необходимым, но я чувствовал себя комфортно с этим.

Снова проверил с помощью gcc на cygwin:

$ gcc -std=c11 test-weird-union.c

По крайней мере, нет синтаксических ошибок. Остальное за пределами моих знаний.

1

For anyone with this situation: I saw this error when I accidentally used my_first_scope::my_second_scope::true in place of simply true, like this:

bool my_var = my_first_scope::my_second_scope::true;

instead of:

bool my_var = true;

This is because I had a macro which caused MY_MACRO(true) to expand into my_first_scope::my_second_scope::true, by mistake, and I was actually calling bool my_var = MY_MACRO(true);.

Here’s a quick demo of this type of scoping error:

Program (you can run it online here: https://onlinegdb.com/BkhFBoqUw):

#include <iostream>
#include <cstdio>

namespace my_first_scope 
{
namespace my_second_scope
{
} // namespace my_second_scope
} // namespace my_first_scope

int main()
{
    printf("Hello Worldn");
    
    bool my_var = my_first_scope::my_second_scope::true;
    
    std::cout << my_var << std::endl;

    return 0;
}

Output (build error):

main.cpp: In function ‘int main()’:
main.cpp:27:52: error: expected unqualified-id before ‘true’
     bool my_var = my_first_scope::my_second_scope::true;
                                                    ^~~~

Notice the error: error: expected unqualified-id before ‘true’, and where the arrow under the error is pointing. Apparently the «unqualified-id» in my case is the double colon (::) scope operator I have just before true.

When I add in the macro and use it (run this new code here: https://onlinegdb.com/H1eevs58D):

#define MY_MACRO(input) my_first_scope::my_second_scope::input

...

bool my_var = MY_MACRO(true);

I get this new error instead:

main.cpp: In function ‘int main()’:
main.cpp:29:28: error: expected unqualified-id before ‘true’
     bool my_var = MY_MACRO(true);
                            ^
main.cpp:16:58: note: in definition of macro ‘MY_MACRO’
 #define MY_MACRO(input) my_first_scope::my_second_scope::input
                                                          ^~~~~

У меня проблемы с решением неизвестной проблемы, с которой я никогда не сталкивался на Arduino Nano (ATmega328). Я создаю исходный код дрона, и у него все хорошо. Но в Arduino IDE неожиданно появились ошибки.
Очевидно, я новичок в программировании. Так что помогите мне узнать, как решить эту проблему.

Я получил такие ошибки:

error: expected unqualified-id before '[' token

error: 'value' does not name a type

Quadcopter_Code_Arduino:580: error: expected unqualified-id
before '[' token

struct op[]

^

Quadcopter_Code_Arduino:589: error: 'value' does not name a type

} value;

^
typedef union accel_t_gyro_union
{
struct
{
uint8_t x_accel_h;
uint8_t x_accel_l;
uint8_t y_accel_h;
uint8_t y_accel_l;
uint8_t z_accel_h;
uint8_t z_accel_l;
uint8_t t_h;
uint8_t t_l;
uint8_t x_gyro_h;
uint8_t x_gyro_l;
uint8_t y_gyro_h;
uint8_t y_gyro_l;
uint8_t z_gyro_h;
uint8_t z_gyro_l;
} reg;
struct op[]
{
int x_accel;
int y_accel;
int z_accel;
int temperature;
int x_gyro;
int y_gyro;
int z_gyro;
} value;

};

1

Решение

Определение / Информация:

От http://en.cppreference.com/w/cpp/language/union

Объединение — это специальный тип класса, который может содержать только один из
Нестатические члены данных одновременно.

А также

Объединение настолько велико, насколько необходимо, чтобы вместить самого большого члена данных.
Другие члены данных размещаются в тех же байтах как часть этого
самый большой член.

Также:

Ваша декларация неверна и должна быть:

struct op
{
int x_accel;
int y_accel;
int z_accel;
int temperature;
int x_gyro;
int y_gyro;
int z_gyro;
} value [SIZE];

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

(Хотя с пустыми скобками он все еще компилируется и работает в моем быстром тестировании … Я тоже должен разобраться в этом поведении.: D)

Решение:

Используйте исправленную декларацию выше.

Совет:
Используйте РАЗМЕР для массива в скобках.
Если вы еще не знаете размер, используйте указатель по причинам, указанным выше.

1

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

struct op[] {} ерунда в любом случае. Если ты хочешь struct тип по имени op, он должен быть за пределами объединения (но это не проблема, может быть проблема с его использованием где-то еще):

struct A {
uint8_t  low_byte; // depends on byte order
uint8_t high_byte;
};

struct B {
int          word;
};

union U {
A  reg;
B  val;
} variable;

Но нет необходимости в массиве вообще. Итак, второе struct должен быть также анонимным:

union accel_t_gyro_union
{
struct
{
uint8_t x_accel_h;
uint8_t x_accel_l;
uint8_t y_accel_h;
uint8_t y_accel_l;
uint8_t z_accel_h;
uint8_t z_accel_l;
uint8_t t_h;
uint8_t t_l;
uint8_t x_gyro_h;
uint8_t x_gyro_l;
uint8_t y_gyro_h;
uint8_t y_gyro_l;
uint8_t z_gyro_h;
uint8_t z_gyro_l;
} reg;
struct
{
int x_accel;
int y_accel;
int z_accel;
int temperature;
int x_gyro;
int y_gyro;
int z_gyro;
} value;
};

1

struct op[] {} выглядит странно для меня. (Я даже не знаю, как читать / интерпретировать это.)

Таким образом, я протестировал это с помощью gcc на cygwin (в упрощенной версии):

$ gcc --version
gcc (GCC) 5.4.0

$ echo 'typedef union u { struct op[] { int i; } value; };
> int main() { return 0; }
> ' > test-weird-union.c

$ gcc test-weird-union.c
test-weird-union.c:1:28: error: expected identifier or '(' before '[' token
typedef union u { struct op[] { int i; } value; };
^
test-weird-union.c:1:42: error: expected ';' before 'value'
typedef union u { struct op[] { int i; } value; };
^
test-weird-union.c:1:42: warning: useless storage class specifier in empty declaration

(Тот же вывод с gcc -std=c11.)

Код, вероятно, неправильный или, по крайней мере, не стандартный C.

ХОРОШО. Думая дополнительно об этом: как это исправить?

Немного больше фона было бы неплохо. Таким образом, рассмотрим это как подход и докажем, как его применять:

#include <stdint.h>

typedef union accel_t_gyro_union
{
struct
{
uint8_t x_accel_h;
uint8_t x_accel_l;
uint8_t y_accel_h;
uint8_t y_accel_l;
uint8_t z_accel_h;
uint8_t z_accel_l;
uint8_t t_h;
uint8_t t_l;
uint8_t x_gyro_h;
uint8_t x_gyro_l;
uint8_t y_gyro_h;
uint8_t y_gyro_l;
uint8_t z_gyro_h;
uint8_t z_gyro_l;
} reg;
struct op
{
int16_t x_accel;
int16_t y_accel;
int16_t z_accel;
int16_t temperature;
int16_t x_gyro;
int16_t y_gyro;
int16_t z_gyro;
} value;
} accel_t_gyro_union;

Следующие вещи, которые я сделал:

  1. Удалил [] позади op исправить синтаксическую ошибку.

  2. Изменил int в int16_t, Это гарантирует, что этот код работает и на не 16-битных платформах.

  3. добавленной accel_t_gyro_union до конца typedef, Это может не быть необходимым, но я чувствовал себя комфортно с этим.

Снова проверил с помощью gcc на cygwin:

$ gcc -std=c11 test-weird-union.c

По крайней мере, нет синтаксических ошибок. Остальное за пределами моих знаний.

1

Вчера написал программу, всё было хорошо, работала нормально. Сегодня решил кое-что в ней доделать, как выяснилось, что теперь там появилась ошибка, хотя код не редактировался с момента последнего «удачного» запуска.

Теперь выдаёт такую ошибку:

[Error] expected unqualified-id before ‘{‘ token (скобка после объявления мэйна).

#include <iostream>
#include <cmath>
#include <string.h>
#include <stdio.h>

using namespace std;

class publication
   {
       protected: char name[30];
                  float price;

       public :
           void getdata()
           {
               cout<<"Nazvanie knigi:"<<endl;
               cin>>name;
               cout<<"Tcena:"<<endl;
               cin>>price;
           }
           void putdata()
           {
               cout<<"Nazvanie knigi:"<<name<<endl;
               cout<<"Tcena:"<<price<<endl;
           }
            virtual void getData()=0;
            virtual void putData()=0;
            virtual bool isOversize()=0;
            virtual void getdat1()=0;
            virtual void putdat1()=0;
   };

class sales
{
    protected:
        float x[3];
    public:
        void getdat()
        {
            cout<<"Skidki (3 mesyatca):"<<endl;
            for (int i=0;i<3;i++)
            {
                cout<<i+1<<" mesyatc="; cin>>x[i];
            }
        }
        void putdat()
        {
            cout<<"Skidki (3 mesyatca):"<<endl;
            for (int i=0;i<3;i++)
            {
                cout<<i+1<<" mesyatc="<<x[i]<<endl;
            }
        }
        virtual void getdat1()=0;
        virtual void putdat1()=0;
};

  class book: public publication,public sales
          {
          private:
            int st;
          public:
            void getdat1()
            {
                sales::getdat();
            }

            void putdat1()
            {
                sales::putdat();
            }
            void getData()
            {
                publication::getdata();
                cout<<"Kol-vo stranic:"<<endl;
                cin>>st;
            }
            void putData()
            {
                publication::putdata();
                cout<<"Kol-vo stranic:"<<st<<endl;
            }
            bool isOversize()
            {
                return(st>800)? true:false;
            }

          };


    class tape: public publication,public sales
          {
          private:
            int m;
          public:
            void getdat1()
            {
                sales::getdat();
            }
            void putdat1()
            {
                sales::putdat();
            }
            void getData()
            {
                publication::getdata();
                cout<<"Kol-vo minut:"<<endl;
                cin>>m;
            }
            void putData()
            {
                publication::putdata();
                cout<<"Kol-vo minut:"<<m<<endl;
            }
            bool isOversize()
            {
                return(m>90)? true:false;
            }

          };


    class disk: public publication,public sales
        {
            private:
                char c;
                int r;
            public:
                void getdat1()
                {
                    sales::getdat();
                }

                void putdat1()
                {
                    sales::putdat();
                }
                void getData()
                {
                    publication::getdata();
                    cout<<"Tip zapisi[CD/DVD]?"<<endl;
                    cin>>c;
                    cout<<"Razmer?"<<endl;
                    cin>>r;
                }
                void putData()
                {
                    publication::putdata();
                    cout<<"Tip zapisi:";
                    if (c=='c') cout<<"CD"<<endl;
                    else cout<<"DVD"<<endl;
                    cout<<"Razmer:"<<r<<endl; 
                }
                bool isOversize()
                {
                    if (c=='c') return(r>700)? true:false;
                    else return(r>2800)? true:false;
                }
        };

//============================================================
int main()
{
    publication *pubarr[20];
    int n=0;
    char ch;
    do
    {
        cout<<"Book[B], Tape[T], Disk[D]?"<<endl;
        cin>>ch;
        if (ch=='b') pubarr[n]=new book;
        else if (ch=='t') pubarr[n]=new tape;
        else pubarr[n]=new disk;
        pubarr[n]->getData();
        pubarr[n]->getdat1();
        n++;
        cout<<"Continue[Y/N]?"<<endl;
        cin>>ch;
    }while(ch=='y');
    int i;
    for(i=0;i<n;i++)
    {
        pubarr[i]->putdata();
        pubarr[i]->putdat1();
        if(pubarr[i]->isOversize())
            cout<<"Prevyshenie razmera!"<<endl;
    }
    return 0;
}

I am working on a project and keep getting this error message in Arduino IDE:

expected unqualified-id before ‘/’ token
Arduino highlights «/ / Maximum length of the array» as the problem.
Here is the code that I am trying to use:

    # Include <SPI.h>
# Define uchar unsigned char
# Define uint unsigned int
/ / Maximum length of the array
# Define MAX_LEN 16
/ / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / /
/ / Set the pin
/ / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / /
const int chipSelectPin = 10; / / if the control panel for the UNO, 328,168
const int chipSelectPin = 53; / / If the control panel is mega 2560,1280
const int NRSTPD = 5;
/ / MF522 command word
# Define PCD_IDLE 0x00 / / NO action; cancel the current command
# Define PCD_AUTHENT 0x0E / / authentication key
# Define PCD_RECEIVE 0x08 / / receive data
# Define PCD_TRANSMIT 0x04 / / Transmit Data
# Define PCD_TRANSCEIVE 0x0C / / Send and receive data
# Define PCD_RESETPHASE 0x0F / / Reset
# Define PCD_CALCCRC 0x03 / / CRC calculation
/ / Mifare_One card command word
# Define PICC_REQIDL 0x26 / / find the antenna area does not enter hibernation
# Define PICC_REQALL 0x52 / / find all the cards antenna area
# Define PICC_ANTICOLL 0x93 / / anti-collision
# Define PICC_SElECTTAG 0x93 / / election card
# Define PICC_AUTHENT1A 0x60 / / authentication key A
# Define PICC_AUTHENT1B 0x61 / / authentication key B
# Define PICC_READ 0x30 / / Read Block
# Define PICC_WRITE 0xA0 / / write block
# Define PICC_DECREMENT 0xC0 / /
# Define PICC_INCREMENT 0xC1 / /
# Define PICC_RESTORE 0xC2 / / transfer block data to the buffer
# Define PICC_TRANSFER 0xB0 / / save the data in the buffer
# Define PICC_HALT 0x50 / / Sleep
/ / And MF522 communication error code is returned when
# Define MI_OK 0
# Define MI_NOTAGERR 1
# Define MI_ERR 2
/ / ------------------ MFRC522 register ---------------
/ / Page 0: Command and Status
# Define Reserved00 0x00
# Define CommandReg 0x01
# Define CommIEnReg 0x02
# Define DivlEnReg 0x03
# Define CommIrqReg 0x04
# Define DivIrqReg 0x05
# Define ErrorReg 0x06
# Define Status1Reg 0x07
# Define Status2Reg 0x08
# Define FIFODataReg 0x09
# Define FIFOLevelReg 0x0A
# Define WaterLevelReg 0x0B
# Define ControlReg 0x0C
# Define BitFramingReg 0x0D
# Define CollReg 0x0E
# Define Reserved01 0x0F
/ / Page 1: Command
# Define Reserved10 0x10
# Define ModeReg 0x11
# Define TxModeReg 0x12
# Define RxModeReg 0x13
# Define TxControlReg 0x14
# Define TxAutoReg 0x15
# Define TxSelReg 0x16
# Define RxSelReg 0x17
# Define RxThresholdReg 0x18
# Define DemodReg 0x19
# Define Reserved11 0x1A
# Define Reserved12 0x1B
# Define MifareReg 0x1C
# Define Reserved13 0x1D
# Define Reserved14 0x1E
# Define SerialSpeedReg 0x1F
/ / Page 2: CFG
# Define Reserved20 0x20
# Define CRCResultRegM 0x21
# Define CRCResultRegL 0x22
# Define Reserved21 0x23
# Define ModWidthReg 0x24
# Define Reserved22 0x25
# Define RFCfgReg 0x26
# Define GsNReg 0x27
# Define CWGsPReg 0x28
# Define ModGsPReg 0x29
# Define TModeReg 0x2A
# Define TPrescalerReg 0x2B
# Define TReloadRegH 0x2C
# Define TReloadRegL 0x2D
# Define TCounterValueRegH 0x2E
# Define TCounterValueRegL 0x2F
/ / Page 3: TestRegister
# Define Reserved30 0x30
# Define TestSel1Reg 0x31
# Define TestSel2Reg 0x32
# Define TestPinEnReg 0x33
# Define TestPinValueReg 0x34
# Define TestBusReg 0x35
# Define AutoTestReg 0x36
# Define VersionReg 0x37
# Define AnalogTestReg 0x38
# Define TestDAC1Reg 0x39
# Define TestDAC2Reg 0x3A
# Define TestADCReg 0x3B
# Define Reserved31 0x3C
# Define Reserved32 0x3D
# Define Reserved33 0x3E
# Define Reserved34 0x3F
/ / -----------------------------------------------
/ / 4 bytes card serial number, the first 5 bytes for the checksum byte
uchar serNum [5];
uchar writeDate [16] = {'T', 'e', 'n', 'g', '', 'B', 'o', 0, 0, 0, 0, 0, 0, 0, 0, 0};
/ / Sector A password, 16 sectors, each sector password 6Byte
uchar sectorKeyA [16] [16] = {{0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF},
{0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF},
{0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF},
};
uchar sectorNewKeyA [16] [16] = {{0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF},
{0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xff, 0x07, 0x80, 0x69, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF},
{0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xff, 0x07, 0x80, 0x69, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF},
};
void setup () {
Serial.begin (9600); / / RFID reader SOUT pin connected to Serial
RX pin at 2400bps
/ / Start the SPI library:
SPI.begin ();
pinMode (chipSelectPin, OUTPUT); / / Set digital pin 10 as OUTPUT to connect
it to the RFID / ENABLE pin
digitalWrite (chipSelectPin, LOW); / / Activate the RFID reader
pinMode (NRSTPD, OUTPUT); / / Set digital pin 10, Not Reset and
Power-down
digitalWrite (NRSTPD, HIGH);
MFRC522_Init ();
}
void loop ()
{
uchar i, tmp;
uchar status;
uchar str [MAX_LEN];
uchar RC_size;
uchar blockAddr; / / select the operating block addresses 0 to 63
/ / Find the card, back card type
status = MFRC522_Request (PICC_REQIDL, str);
if (status == MI_OK)
{
}
/ / Anti-collision, return card serial number 4 bytes
status = MFRC522_Anticoll (str);
memcpy (serNum, str, 5);
if (status == MI_OK)
{
Serial.println ("The card's number is:");
Serial.print (serNum [0], BIN);
Serial.print (serNum [1], BIN);
Serial.print (serNum [2], BIN);
Serial.print (serNum [3], BIN);
Serial.print (serNum [4], BIN);
Serial.println ("");
}
/ / Election card, return to card capacity
RC_size = MFRC522_SelectTag (serNum);
if (RC_size! = 0)
{}
/ / Write data card
blockAddr = 7; / / data block 7
status = MFRC522_Auth (PICC_AUTHENT1A, blockAddr, sectorKeyA [blockAddr / 4],
serNum); / / Certification
if (status == MI_OK)
{
/ / Write data
status = MFRC522_Write (blockAddr, sectorNewKeyA [blockAddr / 4]);
Serial.print ("set the new card password, and can modify the data of the Sector: ");
Serial.print (blockAddr / 4, DEC);
/ / Write data
blockAddr = blockAddr - 3;
status = MFRC522_Write (blockAddr, writeDate);
if (status == MI_OK)
{
Serial.println ("OK!");
}
}
/ / Reader
blockAddr = 7; / / data block 7
status = MFRC522_Auth (PICC_AUTHENT1A, blockAddr,
sectorNewKeyA [blockAddr / 4], serNum); / / Certification
if (status == MI_OK)
{
/ / Read data
blockAddr = blockAddr - 3;
status = MFRC522_Read (blockAddr, str);
if (status == MI_OK)
{
Serial.println ("Read from the card, the data is:");
for (i = 0; i <16; i + +)
{
Serial.print (str [i]);
}
Serial.println ("");
}
}
Serial.println ("");
MFRC522_Halt (); / / command card into hibernation
}

If you see why, please tell me ASAP.
Thank you.

I am working on a project and keep getting this error message in Arduino IDE:

expected unqualified-id before ‘/’ token
Arduino highlights «/ / Maximum length of the array» as the problem.
Here is the code that I am trying to use:

    # Include <SPI.h>
# Define uchar unsigned char
# Define uint unsigned int
/ / Maximum length of the array
# Define MAX_LEN 16
/ / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / /
/ / Set the pin
/ / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / /
const int chipSelectPin = 10; / / if the control panel for the UNO, 328,168
const int chipSelectPin = 53; / / If the control panel is mega 2560,1280
const int NRSTPD = 5;
/ / MF522 command word
# Define PCD_IDLE 0x00 / / NO action; cancel the current command
# Define PCD_AUTHENT 0x0E / / authentication key
# Define PCD_RECEIVE 0x08 / / receive data
# Define PCD_TRANSMIT 0x04 / / Transmit Data
# Define PCD_TRANSCEIVE 0x0C / / Send and receive data
# Define PCD_RESETPHASE 0x0F / / Reset
# Define PCD_CALCCRC 0x03 / / CRC calculation
/ / Mifare_One card command word
# Define PICC_REQIDL 0x26 / / find the antenna area does not enter hibernation
# Define PICC_REQALL 0x52 / / find all the cards antenna area
# Define PICC_ANTICOLL 0x93 / / anti-collision
# Define PICC_SElECTTAG 0x93 / / election card
# Define PICC_AUTHENT1A 0x60 / / authentication key A
# Define PICC_AUTHENT1B 0x61 / / authentication key B
# Define PICC_READ 0x30 / / Read Block
# Define PICC_WRITE 0xA0 / / write block
# Define PICC_DECREMENT 0xC0 / /
# Define PICC_INCREMENT 0xC1 / /
# Define PICC_RESTORE 0xC2 / / transfer block data to the buffer
# Define PICC_TRANSFER 0xB0 / / save the data in the buffer
# Define PICC_HALT 0x50 / / Sleep
/ / And MF522 communication error code is returned when
# Define MI_OK 0
# Define MI_NOTAGERR 1
# Define MI_ERR 2
/ / ------------------ MFRC522 register ---------------
/ / Page 0: Command and Status
# Define Reserved00 0x00
# Define CommandReg 0x01
# Define CommIEnReg 0x02
# Define DivlEnReg 0x03
# Define CommIrqReg 0x04
# Define DivIrqReg 0x05
# Define ErrorReg 0x06
# Define Status1Reg 0x07
# Define Status2Reg 0x08
# Define FIFODataReg 0x09
# Define FIFOLevelReg 0x0A
# Define WaterLevelReg 0x0B
# Define ControlReg 0x0C
# Define BitFramingReg 0x0D
# Define CollReg 0x0E
# Define Reserved01 0x0F
/ / Page 1: Command
# Define Reserved10 0x10
# Define ModeReg 0x11
# Define TxModeReg 0x12
# Define RxModeReg 0x13
# Define TxControlReg 0x14
# Define TxAutoReg 0x15
# Define TxSelReg 0x16
# Define RxSelReg 0x17
# Define RxThresholdReg 0x18
# Define DemodReg 0x19
# Define Reserved11 0x1A
# Define Reserved12 0x1B
# Define MifareReg 0x1C
# Define Reserved13 0x1D
# Define Reserved14 0x1E
# Define SerialSpeedReg 0x1F
/ / Page 2: CFG
# Define Reserved20 0x20
# Define CRCResultRegM 0x21
# Define CRCResultRegL 0x22
# Define Reserved21 0x23
# Define ModWidthReg 0x24
# Define Reserved22 0x25
# Define RFCfgReg 0x26
# Define GsNReg 0x27
# Define CWGsPReg 0x28
# Define ModGsPReg 0x29
# Define TModeReg 0x2A
# Define TPrescalerReg 0x2B
# Define TReloadRegH 0x2C
# Define TReloadRegL 0x2D
# Define TCounterValueRegH 0x2E
# Define TCounterValueRegL 0x2F
/ / Page 3: TestRegister
# Define Reserved30 0x30
# Define TestSel1Reg 0x31
# Define TestSel2Reg 0x32
# Define TestPinEnReg 0x33
# Define TestPinValueReg 0x34
# Define TestBusReg 0x35
# Define AutoTestReg 0x36
# Define VersionReg 0x37
# Define AnalogTestReg 0x38
# Define TestDAC1Reg 0x39
# Define TestDAC2Reg 0x3A
# Define TestADCReg 0x3B
# Define Reserved31 0x3C
# Define Reserved32 0x3D
# Define Reserved33 0x3E
# Define Reserved34 0x3F
/ / -----------------------------------------------
/ / 4 bytes card serial number, the first 5 bytes for the checksum byte
uchar serNum [5];
uchar writeDate [16] = {'T', 'e', 'n', 'g', '', 'B', 'o', 0, 0, 0, 0, 0, 0, 0, 0, 0};
/ / Sector A password, 16 sectors, each sector password 6Byte
uchar sectorKeyA [16] [16] = {{0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF},
{0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF},
{0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF},
};
uchar sectorNewKeyA [16] [16] = {{0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF},
{0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xff, 0x07, 0x80, 0x69, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF},
{0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xff, 0x07, 0x80, 0x69, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF},
};
void setup () {
Serial.begin (9600); / / RFID reader SOUT pin connected to Serial
RX pin at 2400bps
/ / Start the SPI library:
SPI.begin ();
pinMode (chipSelectPin, OUTPUT); / / Set digital pin 10 as OUTPUT to connect
it to the RFID / ENABLE pin
digitalWrite (chipSelectPin, LOW); / / Activate the RFID reader
pinMode (NRSTPD, OUTPUT); / / Set digital pin 10, Not Reset and
Power-down
digitalWrite (NRSTPD, HIGH);
MFRC522_Init ();
}
void loop ()
{
uchar i, tmp;
uchar status;
uchar str [MAX_LEN];
uchar RC_size;
uchar blockAddr; / / select the operating block addresses 0 to 63
/ / Find the card, back card type
status = MFRC522_Request (PICC_REQIDL, str);
if (status == MI_OK)
{
}
/ / Anti-collision, return card serial number 4 bytes
status = MFRC522_Anticoll (str);
memcpy (serNum, str, 5);
if (status == MI_OK)
{
Serial.println ("The card's number is:");
Serial.print (serNum [0], BIN);
Serial.print (serNum [1], BIN);
Serial.print (serNum [2], BIN);
Serial.print (serNum [3], BIN);
Serial.print (serNum [4], BIN);
Serial.println ("");
}
/ / Election card, return to card capacity
RC_size = MFRC522_SelectTag (serNum);
if (RC_size! = 0)
{}
/ / Write data card
blockAddr = 7; / / data block 7
status = MFRC522_Auth (PICC_AUTHENT1A, blockAddr, sectorKeyA [blockAddr / 4],
serNum); / / Certification
if (status == MI_OK)
{
/ / Write data
status = MFRC522_Write (blockAddr, sectorNewKeyA [blockAddr / 4]);
Serial.print ("set the new card password, and can modify the data of the Sector: ");
Serial.print (blockAddr / 4, DEC);
/ / Write data
blockAddr = blockAddr - 3;
status = MFRC522_Write (blockAddr, writeDate);
if (status == MI_OK)
{
Serial.println ("OK!");
}
}
/ / Reader
blockAddr = 7; / / data block 7
status = MFRC522_Auth (PICC_AUTHENT1A, blockAddr,
sectorNewKeyA [blockAddr / 4], serNum); / / Certification
if (status == MI_OK)
{
/ / Read data
blockAddr = blockAddr - 3;
status = MFRC522_Read (blockAddr, str);
if (status == MI_OK)
{
Serial.println ("Read from the card, the data is:");
for (i = 0; i <16; i + +)
{
Serial.print (str [i]);
}
Serial.println ("");
}
}
Serial.println ("");
MFRC522_Halt (); / / command card into hibernation
}

If you see why, please tell me ASAP.
Thank you.

ОЖИДАЕМЫЙ НЕКВАЛИФИЦИРОВАННЫЙ ИДЕНТИФИКАТОР ДО «else» ОШИБКА ARDUINO

Мне нужно сделать программу, которая получает часть от пользователя, а затем упрощает ее.

Я знаю, как это сделать, и выполнил большую часть кода, но все время получаю сообщение об ошибке «error: expected unqualified-id before ‘.’ Token».

Я объявил структуру под названием ReducedForm, которая содержит упрощенные числитель и знаменатель, теперь я пытаюсь отправить упрощенные значения в эту структуру. Вот мой код;

В Rational.h;

#ifndef RATIONAL_H #define RATIONAL_H using namespace std; struct ReducedForm { int iSimplifiedNumerator; int iSimplifiedDenominator; }; //I have a class here for the other stuff in the program #endif 

В Rational.cpp;

#include  #include 'rational.h' using namespace std; void Rational :: SetToReducedForm(int iNumerator, int iDenominator) { int iGreatCommDivisor = 0; iGreatCommDivisor = GCD(iNumerator, iDenominator); //The next 2 lines is where i get the error ReducedForm.iSimplifiedNumerator = iNumerator/iGreatCommDivisor; ReducedForm.iSimplifiedDenominator = iDenominator/iGreatCommDivisor; }; 
  • 2 «Использование пространства имен» в файле заголовка — неприятное дело для пользователей вашего файла.

Вы пытаетесь получить доступ к структуре статически с помощью . вместо того ::, ни его члены static. Либо создать экземпляр ReducedForm:

ReducedForm rf; rf.iSimplifiedNumerator = 5; 

или измените членов на static как это:

struct ReducedForm { static int iSimplifiedNumerator; static int iSimplifiedDenominator; }; 

В последнем случае вы должны получить доступ к участникам с помощью :: вместо того . Однако я очень сомневаюсь, что последнее — то, что вы собираетесь делать;)

Имя структуры ReducedForm; вам нужно сделать объект (экземпляр struct или class) и используйте это. Сделай это:

ReducedForm MyReducedForm; MyReducedForm.iSimplifiedNumerator = iNumerator/iGreatCommDivisor; MyReducedForm.iSimplifiedDenominator = iDenominator/iGreatCommDivisor; 

ReducedForm это тип, поэтому вы не можете сказать

ReducedForm.iSimplifiedNumerator = iNumerator/iGreatCommDivisor; 

Вы можете использовать только . оператор на экземпляре:

ReducedForm rf; rf.iSimplifiedNumerator = iNumerator/iGreatCommDivisor; 
  • о да, теперь я это вижу. Не знаю, как я это пропустил. Глупая ошибка. Спасибо

Tweet

Share

Link

Plus

Send

Send

Pin

Я продолжаю получать эту ошибку при работе с g ++.

Вот эта строка кода:

Register register = new Register(til_amt, num_ones);

Вот определение заголовка:

Register(int, int);

Вот определение реализации:

Register::Register(int amt, int ones)
{
    init();

    til_amt += amt;
    num_ones += ones;
}

Функция init () определяется встроенной функцией и просто устанавливает для полей значение 0. Я выделил проблему в этих строках кода, я просмотрел все страницы stackoverflow / google и, похоже, не смог решить проблему. Я даже попытался разбить экземпляр объекта на 2 строки, но это тоже не сработало.

2 ответа

Лучший ответ

register — ключевое слово. Его нельзя использовать как переменную.

Из стандарта C ++:

7.1.1 Спецификаторы класса хранения [dcl.stc]

1 Спецификаторы класса хранения:

   storage-class-specifier:  
      register
      static
      thread_local
      extern
      mutable


4

R Sahu
5 Дек 2015 в 05:46

register — ключевое слово, поэтому вы не можете использовать его в качестве имени переменной. Переименуйте его во что-нибудь еще, и он должен работать.

Предполагается, что он намекнет компилятору, что переменная может быть сохранена в регистре, но похоже, что большинство компиляторов решат это для себя (вроде как inline, хотя inline имеет большее значение).


1

Weak to Enuma Elish
5 Дек 2015 в 05:46

#c #oop #templates #vector #friend

Вопрос:

Я пытаюсь написать векторный класс, который включает сортировку функций друзей(алгоритм-сортировка пузырьков), и у меня есть некоторые трудности с этой функцией. Эта функция сортировки также является шаблонной функцией итератора шаблонов, а итератор имеет тип T* в векторе класса. Ниже приведен мой код:

 namespace THU {
template <class T>
void iswap(T* a, T* b) {
    T tmp = *a;
    a = b;
    b = amp;tmp;
}
template <class T>
class iVector {
   protected:
    int _size;
    int use;
    T* _vector;

   public:
    typedef T* iterator;
    iVector(int n) : _size(n) {
        _vector = new T[n];
        use = 0;
    }
    iterator begin() { return _vector; }
    iterator end() { return begin()   use; }
    void clear() { use = 0; }
    bool empty() const {
        if (use == 0)
            return true;
        else
            return false;
    }
    void pop_back() {
        if (use > 0) {
            use -= 1;
        } else
            throw use;
    }
    void push_back(const Tamp; v) {
        if (use < _size) {
            _vector[use] = v;
            use  ;
        } else
            throw use;
    }
    Tamp; operator[](int n) {
        if (n >= 0 amp;amp; n < use) {
            return _vector[n];
        } else
            throw use;
    }
    friend void sort<iterator>(iterator begin, iterator end);
    void print() {
        for (int i = 0; i < use; i  )
            std::cout << _vector[i] << " ";
        std::cout << std::endl;
    }
};
template <class iterator>
void sort(iterator begin, iterator end) {
    iterator i = end - 1;
    for (; i != begin; i--) {
        iterator j = begin;
        for (; j != i; j  ) {
            if (*j > *(j   1))
                iswap(j, j   1);
        }
    }
}
}  // namespace THU
 

и это встречает ошибку в названии. Кто-нибудь может мне помочь?

Комментарии:

1. обе ошибки находятся в положении friend void sort<iterator>

2. Как ты думаешь, почему sort нужно быть другом? Он не имеет доступа ни к одному члену iVector .

Ответ №1:

Вам нужно объявить sort об этом заранее; или переместить определение sort перед определением iVector напрямую. Например.

 template <class iterator>
void sort(iterator begin, iterator end);

template <class T>
class iVector {
    ...
    friend void sort<iterator>(iterator begin, iterator end);
    ...
};

...
 

Если вы хотите объявить шаблон другом, это должно быть

 template <class T>
class iVector {
    ...
    // friend declaration
    template <class iterator>
    friend void sort(iterator begin, iterator end);
    ...
};

// definition
template <class iterator>
void sort(iterator begin, iterator end) {
    ...
}
 

Комментарии:

1. Ух ты, большое тебе спасибо! Это действительно удается. Так почему же это могло произойти? Обычно мы сначала объявляем функцию друга в классе, а затем пишем ее определение?

2. @dubugger Отклик изменен.

когда я хочу скомпилировать, я получаю:
Probléme: ожидаемый неквалифицированный идентификатор до «возвращения»
return 0;
о последней строке:
erreur: expexted декларация перед {токеном

Я оставил код без изменений только в средней части, которую я изменил… в чем проблема???
вот мой код:


#include <iostream>
using namespace std;

int main()
{
  cout << "Pensez a un personnage : Mlle Rose, le Professeur Violet, "
       << "le Colonel Moutarde," << endl
       << "le Reverend Olive ou Mme Leblanc." << endl << endl;

  cout << "Votre personnage a-t-il des moustaches (1 : oui, 0 : non) ? ";
  bool moustaches;
  cin >> moustaches;

  cout << "Votre personnage porte-t-il des lunettes ? ";
  bool lunettes;
  cin >> lunettes;

  cout << "Votre personnage porte-t-il un chapeau ? ";
  bool chapeau;
  cin >> chapeau;

  cout << "Est-ce que votre personnage est un homme ? ";
  bool homme;
  cin >> homme;

  cout << "==> Le personnage auquel vous pensez est ";

  if (chapeau) {
    /*******************************************
     * Completez le programme a partir d'ici.
     *******************************************/
    cout << "le Professeur Violet";

    else if (moustaches) {
        cout << "le Colonel Moutarde";
    }
    else if (not lunettes) {
        cout << "Mlle Rose";
    }
    else if (homme) {
        cout <<"le Révérend Olive";
    }
    else {
        cout <<"Mme Leblanc";
    }

    /*******************************************
     * Ne rien modifier apres cette ligne.
     *******************************************/
  }

  cout << endl;

  return 0;
}


----------

04 окт. 2013, в 23:27

Поделиться

Источник

4 ответа

if (chapeau) {

Вы забыли конечную фигуру в этом выражении if, поэтому последующий else if считается синтаксической ошибкой. Вам нужно добавить скобку, когда тело оператора if завершено:

if (chapeau) {
    cout << "le Professeur Violet";
}
else if (moustaches) {
    cout << "le Colonel Moutarde";
}
// ...

0x499602D2
04 окт. 2013, в 21:40

Поделиться

Просто ради людей, которые приземлились здесь по той же причине, я сделал:

Не используйте зарезервированные ключевые слова

Я назвал функцию в определении класса delete(), которая является зарезервированным ключевым словом и не должна использоваться как имя функции. Переименование его на удаление() (что также имело смысл семантически в моем случае) разрешило проблему.

Список зарезервированных ключевых слов:
http://en.cppreference.com/w/cpp/keyword

Я цитирую:
«Поскольку они используются языком, эти ключевые слова недоступны для переопределения или перегрузки».

Niko
13 окт. 2016, в 12:35

Поделиться

Предложения:

  • используйте согласованные 3-4 отступов в пространстве, и вы найдете эти проблемы намного проще
  • используйте стиль привязки, который выравнивает {} по вертикали, и вы быстро увидите эти проблемы.
  • всегда отступ блокирует другой уровень
  • используйте редактор подсветки синтаксиса, это поможет, вы поблагодарите меня позже

например,

type
functionname( arguments )
{
    if (something)
    {
        do stuff
    }
    else
    {
        do other stuff
    }
    switch (value)
    {
        case 'a':
            astuff
            break;
        case 'b':
            bstuff
            //fallthrough //always comment fallthrough as intentional
        case 'c':
            break;
        default: //always consider default, and handle it explicitly
            break;
    }
    while ( the lights are on )
    {
        if ( something happened )
        {
            run around in circles
            if ( you are scared ) //yeah, much more than 3-4 levels of indent are too many!
            {
                scream and shout
            }
        }
    }
    return typevalue; //always return something, you'll thank me later
}

ChuckCottrill
05 окт. 2013, в 01:29

Поделиться

Вам нужно переместить «}» до строки cout << endl; до строки до первого else.

CS Pei
04 окт. 2013, в 22:56

Поделиться

Ещё вопросы

  • 0MySQL запрос для сбора некорректно хранимых данных
  • 1извлечение имени файла с расширением формы URL
  • 0kohana — обрезать результаты БД ORM перед передачей для просмотра
  • 0Обтекание интерфейсов dx9 и функций перехвата
  • 0AES — Crypto JS & PHP
  • 0Проблемы с добавлением ключевых слов с помощью AdWords API
  • 1Заменить первую строку файла в андроиде
  • 1Как получить img src-ссылки из элемента управления WebBrowser
  • 1правильный способ получения широты и долготы в Android
  • 0Угловая перезагрузка D3 Chart Директива после события
  • 1Рассчитать Tf-Idf баллы в пандах?
  • 0обновить извлеченное значение формы из mysql
  • 0JQuery Mobile — все, что содержится в новых Div
  • 0Значение переключателя отправляется как «вкл» при отправке формы
  • 0быстрое заполнение strcpy для одного слова
  • 1Почему я получаю flask.cli.NoAppException: при импорте «приложения» была вызвана ошибка ImportError?
  • 1Заменить последний матч регулярного выражения
  • 1Эффективно сравнивайте серии поплавков панд с рядами панд
  • 1Вызывать сборщик мусора после ImageList.Items.Clear ()?
  • 0Ось даты AngularJs UI-диаграммы не работает
  • 0Как выбрать неагрегированные столбцы в запросе с предложением GROUP BY, которое функционально не зависит от столбцов в предложении GROUP BY?
  • 0Как включить медленный журнал запросов для движка Amazon «Aurora MySQL»?
  • 0Можете ли вы передать переменную Javascript из одной функции в другую, используя HTML
  • 0Используйте JSON для отображения контента из базы данных
  • 1Заголовки отсутствуют, даже если они явно указаны при чтении файла .ORC с помощью PySpark
  • 1Преобразовать ‘Task <IList <T >>’ в ‘IList <T>’
  • 1Каковы некоторые методы динамической проверки для универсального класса?
  • 1Проблемы с p5.js при отображении альфа-канала
  • 0Мой список объектов уничтожается
  • 1Переместить позицию таблицы Matplotlib Python
  • 1Как поместить галерею в виджет на домашнем экране?
  • 1Есть ли способ изменить атрибуты узла карты сайта во время выполнения?
  • 1показывает неправильный ответ для общего объема физической памяти в Java
  • 0Y-ось углового NVD3 устанавливает минимальное значение данных в качестве максимального значения диапазона
  • 0Отключить всплывающую подсказку текста компонентов в iframe (другой домен)?
  • 0Система RBAC с двумя параметрами
  • 0операторы if и if-else не работают с c ++
  • 1Как найти элемент в базе данных, используя linq
  • 0как остановить быстрые события зависания в JQuery
  • 1Деструктуризация объекта параметра функции приводит к неопределенным переменным
  • 0Изменить порядок ассоциативного массива после удаления одного элемента
  • 1«Метод должен возвращать результат» при вызове другого метода, который выдает только исключение
  • 1Android настроить строку в ListPreference
  • 0Получить максимальную дату для каждой строки в таблице в SQL
  • 1Как игнорировать разделитель CSV в кавычках?
  • 1работающий андроид источник из git tree
  • 1Видимо противоречивое поведение функции Javascript
  • 1Альтернатива .Equals () при передаче нулевого значения
  • 1Chart.js не показывает динамически заполненные данные
  • 0PHP получает выбранные строки таблицы из флажков

Сообщество Overcoder

Вчера написал программу, всё было хорошо, работала нормально. Сегодня решил кое-что в ней доделать, как выяснилось, что теперь там появилась ошибка, хотя код не редактировался с момента последнего «удачного» запуска.

Теперь выдаёт такую ошибку:

[Error] expected unqualified-id before ‘{‘ token (скобка после объявления мэйна).

#include <iostream>
#include <cmath>
#include <string.h>
#include <stdio.h>

using namespace std;

class publication
   {
       protected: char name[30];
                  float price;

       public :
           void getdata()
           {
               cout<<"Nazvanie knigi:"<<endl;
               cin>>name;
               cout<<"Tcena:"<<endl;
               cin>>price;
           }
           void putdata()
           {
               cout<<"Nazvanie knigi:"<<name<<endl;
               cout<<"Tcena:"<<price<<endl;
           }
            virtual void getData()=0;
            virtual void putData()=0;
            virtual bool isOversize()=0;
            virtual void getdat1()=0;
            virtual void putdat1()=0;
   };

class sales
{
    protected:
        float x[3];
    public:
        void getdat()
        {
            cout<<"Skidki (3 mesyatca):"<<endl;
            for (int i=0;i<3;i++)
            {
                cout<<i+1<<" mesyatc="; cin>>x[i];
            }
        }
        void putdat()
        {
            cout<<"Skidki (3 mesyatca):"<<endl;
            for (int i=0;i<3;i++)
            {
                cout<<i+1<<" mesyatc="<<x[i]<<endl;
            }
        }
        virtual void getdat1()=0;
        virtual void putdat1()=0;
};

  class book: public publication,public sales
          {
          private:
            int st;
          public:
            void getdat1()
            {
                sales::getdat();
            }

            void putdat1()
            {
                sales::putdat();
            }
            void getData()
            {
                publication::getdata();
                cout<<"Kol-vo stranic:"<<endl;
                cin>>st;
            }
            void putData()
            {
                publication::putdata();
                cout<<"Kol-vo stranic:"<<st<<endl;
            }
            bool isOversize()
            {
                return(st>800)? true:false;
            }

          };


    class tape: public publication,public sales
          {
          private:
            int m;
          public:
            void getdat1()
            {
                sales::getdat();
            }
            void putdat1()
            {
                sales::putdat();
            }
            void getData()
            {
                publication::getdata();
                cout<<"Kol-vo minut:"<<endl;
                cin>>m;
            }
            void putData()
            {
                publication::putdata();
                cout<<"Kol-vo minut:"<<m<<endl;
            }
            bool isOversize()
            {
                return(m>90)? true:false;
            }

          };


    class disk: public publication,public sales
        {
            private:
                char c;
                int r;
            public:
                void getdat1()
                {
                    sales::getdat();
                }

                void putdat1()
                {
                    sales::putdat();
                }
                void getData()
                {
                    publication::getdata();
                    cout<<"Tip zapisi[CD/DVD]?"<<endl;
                    cin>>c;
                    cout<<"Razmer?"<<endl;
                    cin>>r;
                }
                void putData()
                {
                    publication::putdata();
                    cout<<"Tip zapisi:";
                    if (c=='c') cout<<"CD"<<endl;
                    else cout<<"DVD"<<endl;
                    cout<<"Razmer:"<<r<<endl; 
                }
                bool isOversize()
                {
                    if (c=='c') return(r>700)? true:false;
                    else return(r>2800)? true:false;
                }
        };

//============================================================\
int main()
{
    publication *pubarr[20];
    int n=0;
    char ch;
    do
    {
        cout<<"Book[B], Tape[T], Disk[D]?"<<endl;
        cin>>ch;
        if (ch=='b') pubarr[n]=new book;
        else if (ch=='t') pubarr[n]=new tape;
        else pubarr[n]=new disk;
        pubarr[n]->getData();
        pubarr[n]->getdat1();
        n++;
        cout<<"Continue[Y/N]?"<<endl;
        cin>>ch;
    }while(ch=='y');
    int i;
    for(i=0;i<n;i++)
    {
        pubarr[i]->putdata();
        pubarr[i]->putdat1();
        if(pubarr[i]->isOversize())
            cout<<"Prevyshenie razmera!"<<endl;
    }
    return 0;
}

cpp questions's user avatar

задан 16 мар 2016 в 12:19

Леонид's user avatar

6

Уберите в конце этой строки

//============================================================\

две обратные наклонные черты, чтобы было вот так

//============================================================

И все у Вас получится :)

Причина кроется в том, что символ обратной косой черты () — это символ продолжения строки, если он стоит в конце строки. Все строки, заканчивающиеся обратной косой чертой (), за которыми сразу следует символ новой строки, объединяются со следующей строкой в исходном файле, формируя логические строки из физических строк. (MSDN)

Grundy's user avatar

Grundy

80k9 золотых знаков77 серебряных знаков133 бронзовых знака

ответ дан 16 мар 2016 в 12:32

Max ZS's user avatar

Max ZSMax ZS

3,3511 золотой знак10 серебряных знаков25 бронзовых знаков

12

ОЖИДАЕМЫЙ НЕКВАЛИФИЦИРОВАННЫЙ ИДЕНТИФИКАТОР ДО «else» ОШИБКА ARDUINO

Мне нужно сделать программу, которая получает часть от пользователя, а затем упрощает ее.

Я знаю, как это сделать, и выполнил большую часть кода, но все время получаю сообщение об ошибке «error: expected unqualified-id before ‘.’ Token».

Я объявил структуру под названием ReducedForm, которая содержит упрощенные числитель и знаменатель, теперь я пытаюсь отправить упрощенные значения в эту структуру. Вот мой код;

В Rational.h;

#ifndef RATIONAL_H #define RATIONAL_H using namespace std; struct ReducedForm { int iSimplifiedNumerator; int iSimplifiedDenominator; }; //I have a class here for the other stuff in the program #endif 

В Rational.cpp;

#include  #include 'rational.h' using namespace std; void Rational :: SetToReducedForm(int iNumerator, int iDenominator) { int iGreatCommDivisor = 0; iGreatCommDivisor = GCD(iNumerator, iDenominator); //The next 2 lines is where i get the error ReducedForm.iSimplifiedNumerator = iNumerator/iGreatCommDivisor; ReducedForm.iSimplifiedDenominator = iDenominator/iGreatCommDivisor; }; 
  • 2 «Использование пространства имен» в файле заголовка — неприятное дело для пользователей вашего файла.

Вы пытаетесь получить доступ к структуре статически с помощью . вместо того ::, ни его члены static. Либо создать экземпляр ReducedForm:

ReducedForm rf; rf.iSimplifiedNumerator = 5; 

или измените членов на static как это:

struct ReducedForm { static int iSimplifiedNumerator; static int iSimplifiedDenominator; }; 

В последнем случае вы должны получить доступ к участникам с помощью :: вместо того . Однако я очень сомневаюсь, что последнее — то, что вы собираетесь делать;)

Имя структуры ReducedForm; вам нужно сделать объект (экземпляр struct или class) и используйте это. Сделай это:

ReducedForm MyReducedForm; MyReducedForm.iSimplifiedNumerator = iNumerator/iGreatCommDivisor; MyReducedForm.iSimplifiedDenominator = iDenominator/iGreatCommDivisor; 

ReducedForm это тип, поэтому вы не можете сказать

ReducedForm.iSimplifiedNumerator = iNumerator/iGreatCommDivisor; 

Вы можете использовать только . оператор на экземпляре:

ReducedForm rf; rf.iSimplifiedNumerator = iNumerator/iGreatCommDivisor; 
  • о да, теперь я это вижу. Не знаю, как я это пропустил. Глупая ошибка. Спасибо

Tweet

Share

Link

Plus

Send

Send

Pin

В вашем коде много проблем.

Во-первых, как указывает Иван, вы пытаетесь определить функцию внутри функции (ask() внутри main()). Это неверно.

Во-вторых, у вас есть goto (почему ?!) попытка перейти к метке в другой функции. Я сомневаюсь, что ваш компилятор даже это позволит, но как вы ожидаете, что это сработает? Вы пытаетесь использовать переменные, переданные вашей функции addition которые не существуют, поскольку вы никогда не вызываете функцию, и стек никогда не был настроен для нее. Это плохо, не делайте этого, просто вызовите функцию правильно.

В-третьих, #include Директива препроцессора заканчивается новой строкой, а не точкой с запятой. Это может привести к некоторым (относительно) трудным для отслеживания ошибкам компиляции.

В-четвертых, вы ошибочно пытаетесь назначить const char* "Addition" в operation когда то, что вы хотели использовать, было оператором равенства ==. Это не будет работать с эфиром, потому что operation является r-значением и не может быть присвоено ему подобным образом. Если вы хотите изменить его, вам нужно будет объявить его как указатель, но опять же, это не то, что вы собираетесь семантически …

Если вы хотите сравнить строки и (по какой-либо причине …) намерены использовать указатели на char, вам следует использовать стркмп. Тем не менее, вы находитесь в стране C ++, поэтому просто используйте std:string .

Попробуйте что-нибудь подобное. Я никоим образом не улучшал ваш код, просто сделал что-то, что будет компилироваться и запускаться. Я внес несколько изменений.

Помимо избавления от нескольких синтаксических ошибок, ваш исходный Add функция приняла результат как float аргумент. Назначение этого изнутри функции приведет только к изменению копии. Вам нужно будет взять указатель или ссылку, если вы хотите, чтобы вызывающий абонент видел измененное значение, но вам это совсем не нужно, так как вы можете просто вернуть результат.

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

#include <iostream>
#include <string>

using namespace std;

void Ask();
float Add( float, float );

int main( size_t argc, char* argv[] )
{
    Ask();
    return 0;
}

void Ask()
{
    cout << "Type Addition, Subtraction, Multiplication, Division, Sine, Cosine, or Tangent:n";

    string operation;
    cin >> operation;

    if( operation == "Addition" )
    {
        float first = 0, second = 0;
        cout << "enter first operand";
        cin >> first;

        cout << "enter second operand";
        cin >> second;

        cout << "The result is: " << Add( first, second );
    }
}

float Add( float first, float second ) 
{
    return first + second;
}

Содержание

  1. ERROR: expected unqualified-id before ‘(‘ token #5787
  2. Comments
  3. Basic Infos
  4. Platform
  5. Settings in IDE
  6. Problem Description
  7. Debug Messages
  8. Temporary fix
  9. Footer
  10. Arduino.ru
  11. Регистрация новых пользователей и создание новых тем теперь только на новом форуме https://forum.arduino.ru
  12. forum.arduino.ru
  13. Ошибки в скетчи.

ERROR: expected unqualified-id before ‘(‘ token #5787

Basic Infos

  • This issue complies with the issue POLICY doc.
  • I have read the documentation at readthedocs and the issue is not addressed there.
  • I have tested that the issue is present in current master branch (aka latest git).
  • I have searched the issue tracker for a similar issue.
  • If there is a stack dump, I have decoded it.
  • I have filled out all fields below.

Platform

  • Hardware: Sparkfun ESP8266 Thing Dev
  • Core Version: 2.5.0
  • Development Env: Arduino IDE
  • Operating System: Windows

Settings in IDE

  • Module: Generic ESP8266 Module
  • Flash Mode: N/A
  • Flash Size: N/A
  • lwip Variant: N/A
  • Reset Method: N/A
  • Flash Frequency: N/A
  • CPU Frequency: N/A
  • Upload Using: N/A
  • Upload Speed: N/A

Problem Description

On building a sample piece of code for an ESP8266 Module I am unable to compile. The error I am seeing when running Verify in the Arduino IDE is:

Debug Messages

The text was updated successfully, but these errors were encountered:

The issue template requires a MCVE sketch to reproduce. Without that, it’s unlikely this will be looked at.
Please provide a minimal sketch to reproduce the issue.

I encountered the same error after updating to 2.5.0

Arduino IDE Version: 1.8.8
Board Manager: Adafruit Feather HUZZAH ESP8266 Version 2.5.0
Library: AzureIoTHub Version 1.0.45

It is a compilation issue.

PlatformIO 3.6.4 | VSCode 1.31.1
Board: Wemos D1 Mini
Library: esp8266/Arduino 2.5.0

Ok, so I found the underlying error in random.tcc (the file from our compilation errors).

This is the function that is responsible for the compilation error:

«round» in std::round() gets replaced by the round macro in Arduino.h , thus rendering the syntax faulty and not compilable.

Temporary fix

Commenting out line 137 in Arduino.h fixes the problem and the code compiles as usual.

Yep. Seems like ESP8266 is trying to redefine round, but it’s literally the same? Can the ESP8266 folks explain this block of code in the ESP8266 Arduino.h?

Vanilla Arduino.h:

ESP8266 Arduino.h:

ESP Arduino.h was just a forked copy of arduino.cc’s Arduino.h as far as I understand it.

I personally think these macros are an awful construct, but it’s a compatibility thing having those macros (esp. since . round returns a float/double on most every system out there while this macro returns a long.

That said, it looks like both AVR arduino and esp8266 arduino match here. Do you have some other Arduino chip where this #define round(x) is not present in the header (i.e. one where you could build your sample successfully)?

Then we could say we’re still Arduino compatible and remove these ugly bits.

Yep. Seems like ESP8266 is trying to redefine round, but it’s literally the same?

This question would be asked to «vanilla» arduino folks.
We would like (at least I) to remove it but we can’t (can we?), side effects are supposed to be unpredictable when it comes to compatibility with arduino.

There are three versions of round, the one in math.h, the one in libstdc++ ( std::round() ) and this define which breaks standard c++ code using std::round , this issue. If possible, one can put #undef round where std::round is needed (or libc’s). That way core sources don’t need to be modified.

The least we could do is

which is saner (same goes with the other macros) (because of only one evaluation of (x) ).

The other way to avoid the issue in your code is to just add #undef round immediately before the offending include/source files.

I am curious why this macro error just started ocurring in v2.5.0. Did something in the Arduino.h library change from the previous version?

That said, it looks like both AVR arduino and esp8266 arduino match here. Do you have some other Arduino chip where this #define round(x) is not present in the header (i.e. one where you could build your sample successfully)?

it looks like in ESP32 they’re overriding «vanilla» Arduino.h macros with those from std.

Also as someone with no knowledge really of the arduino board manager design, is there a reason for the fork of Arduino.h for ESP8266 except for when you want to redefine certain definitions?

I also have @KarateBrot’s question. It looks like espressif had a PR for ESP32 recently to redefine their round and abs values, so perhaps there was a breaking change somewhere else that affected everyone.

The other way to avoid the issue in your code is to just add #undef round immediately before the offending include/source files.

I added #undef round in my ino file at start but still receiving this error. Commenting corresponding line in Arduino.h fixes problem.

To get past this i deleted the #define line in the ESP8266 library manually.

To get past this i deleted the #define line in the ESP8266 library manually.

I did delete #define round(x). My arduino works fine. but it does not connect iothub.

After reading through, it seems like this can be closed. The workaround breaks Arduino compatibility (which, in this case, I think is perfectly fine because the Arduino macro is a brain dead leftover from a time when they didn’t have any FP in the AVR), so it can’t be part of our core.

Actually, the code snippet shown requires the real double round(double) method to function properly. So, your change (or just adding #undef round after including Arduino.h is needed to make the Azure code work.

De-crufting Arduino.h is a bigger discussion and probably needs to be held in arduino.cc’s repos so that every Arduino plug-in will follow through.

After reading through, it seems like this can be closed. The workaround breaks Arduino compatibility (which, in this case, I think is perfectly fine because the Arduino macro is a brain dead leftover from a time when they didn’t have any FP in the AVR), so it can’t be part of our core.

Actually, the code snippet shown requires the real double round(double) method to function properly. So, your change (or just adding #undef round after including Arduino.h is needed to make the Azure code work.

De-crufting Arduino.h is a bigger discussion and probably needs to be held in arduino.cc’s repos so that every Arduino plug-in will follow through.

What change? Trying/failing to compile adafruit ESP8266 azure sample code brought me here. What exactly is the necessary change? If commenting out the def breaks iothub, then how to not break it? Thanks.

What change? Trying/failing to compile adafruit ESP8266 azure sample code brought me here. What exactly is the necessary change? If commenting out the def breaks iothub, then how to not break it? Thanks.

A workaround for me was to comment (or delete) the round macro in arduino.h (#define round(x) . ) because it clashes with std::round of c++. Maybe you need to comment other macros but at least for me it was a problem with round.

© 2023 GitHub, Inc.

You can’t perform that action at this time.

You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.

Источник

Arduino.ru

Регистрация новых пользователей и создание новых тем теперь только на новом форуме https://forum.arduino.ru

forum.arduino.ru

Ошибки в скетчи.

Здравствуйте, у меня вот такой скетч:

При компиляции скетча вылетет такая ошибка:

Версия ардуины 1.6.0

Ну, как минимум, количество открывающих фигурных скобок (6 шт.) не соответсвует количеству закрывающих (7 шт., лишняя в строке 32). И два раза подряд else (строки 28, 34), перед каждым else должен быть свой if.

все ошибки он вам и написал, даже со ссылками на строки, только чаще всего ошибки не в них, просто затык происходит у компилятора именно на этом месте.

операторы иф, елсе сами надеюсь поправите, не хочу ковыряться с вашими проверками. используйте их правильно и будет работать. а вообще заведите себе шаманский бубен програмиста, он помогает 🙂 с его помощью входите в транс и проникайте внутрь программы. и все.

http://arduino.ru/Reference/Else приведенные пример 2 гумно — новичку быстрее запутаться, чем разобраться

операторы после иф и елсе возмите за правило писать в < >я обычно делаю отступы

Странно, скетч показан что вкружен, но ардуино и датчик не хотят работать.

У меня вот ещё один вопрос. на этом видио https://www.youtube.com/watch?v=GVXQKYpCsNw объясняется как устронить основную проблему этого датчик HC-SR04. Но я не могу понять куда он этот доп. код нужно вставить( Пожалуйста, могли бы вы мне помочь. Вот этот код, который на видео:

duration = pulseIn(echoPin, HIGH);

Serial.println(«Reload ultrasonic, fix bug SR04» );

const int Trig = 8;

операторы после иф и елсе возмите за правило писать в < >я обычно делаю отступы

Я конечно извеняюсь, но Вы используете плохой стиль оформления кода. Советовать его новичкам — категорически не стоит.

«Открывающую скобку часто оставляют на одной строке с заголовком (оператора, подпрограммы, структуры и т. п.), при этом она может оказаться сколь угодно далеко справа, но закрывающая скобка при этом обязана находиться в той же колонке, где начался заголовок.»

понятнее намного будет писать так

а если вложенный, то

так понятно, что и где закрывается, и помогает от того, что все компилится, а работает не так

Прссститте! А можно уточнить? Очень важный для меня момент — по 10 минут по утрам трачу: вот с какого конца яйцо-в-смятку нужно разбивать? Вроде с тупого положено? Я где-то читал, что учить новичков разбивать с острого конца — это путь в АДДДД! Это так?

Скажите, почему этот скетч не фурычит.

форматирование кода не по феншую

ребята помогите пожалуйста. вот код

при попытке компиляции выходят такие ошибки

kod:7: error: found ‘:’ in nested-name-specifier, expected ‘::’

kod:7: error: ‘http’ does not name a type

H:проекты_arduinoСЂРѕР±РѕС‚ тележкаинет СЂРѕР±РѕС‚2 вариантkodkod.ino: In function ‘void loop()’:

kod:31: error: ‘LedStep’ was not declared in this scope

kod:36: error: ‘LedStep’ was not declared in this scope

kod:41: error: ‘LedStep’ was not declared in this scope

exit status 1
found ‘:’ in nested-name-specifier, expected ‘::’

что это за ошибки? код рабочий так как делал по статье

Убери ссылку из 7 строки. Если копипастишь откуда-то код — будь внимательнее.

форматирование кода не по феншую

Дядя шутить изволит ,убери ссылку и объяви переменную

вот твоя 7 и 8 строка

Здравствуйте, у меня вот такой скетч:

При компиляции скетча вылетет такая ошибка:

Это всё я исправил, скетч в ардуину вгрузился, но сама она и датчик не работают.

Тоесть на выходах ничего нету.

После void loop() <

у вас не хватает этих трёх строчек:

digitalWrite(11, LOW);
delayMicroseconds(2);
digitalWrite(11, HIGH);

Люди добрые, сорри, если злой офф-топ, но. всё ж это краем-то со скетчем связано 🙂

Старые файлы проектов *.ino открываются пустыми (сейчас ide v. 1.6.5). Хотя я с тех пор их не менял. Да и если на размер их посмотреть — они разного размера. И от пустого файла проекта отличаются. Как из них код вытащить? Качать и ставить старые версии IDE? А может какой редактор хитрый есть (а то нотпад тоже пустоту показывает :(( )

Люди добрые, сорри, если злой офф-топ, но. всё ж это краем-то со скетчем связано 🙂

Старые файлы проектов *.ino открываются пустыми (сейчас ide v. 1.6.5). Хотя я с тех пор их не менял. Да и если на размер их посмотреть — они разного размера. И от пустого файла проекта отличаются. Как из них код вытащить? Качать и ставить старые версии IDE? А может какой редактор хитрый есть (а то нотпад тоже пустоту показывает :(( )

ну, да — что ты намутил с правами доступа, только тебе самому известно. или антивирус с дурной головы установил.

Та не, на права бы он ругался. И на другой машине тоже были бы «вопросы» от системы. А ИДЕ просто открывает файл. Но открывает — пустым. А размер в килобайтах есть. То есть там есть что-то. Но как его открыть. Вот я и подумал, может кто с такой же проблеммой сталкивался уже и решение нашел.

UPD: в просмотрщике Командера, в двоичном и шестнадцатиричном режимах показывает, что файлы забиты нолями :((( Печаль. Как так вышло. Нолями, и файлы разных размером. Мистика.

Та не, на права бы он ругался. И на другой машине тоже были бы «вопросы» от системы. А ИДЕ просто открывает файл. Но открывает — пустым. А размер в килобайтах есть. То есть там есть что-то. Но как его открыть. Вот я и подумал, может кто с такой же проблеммой сталкивался уже и решение нашел.

ясно же что что-то не даёт софту доступ к содержимому файла — тебе кажется, что файл пустой, т.к. запускается текстовый редактор, который ничего не читает.

*скопируй на флешку и открой на другом компе.

Ну пусть я нуб, ладно.

Может у тебя не нолями забитый файл откроется 🙁

Ну пусть я нуб, ладно.

Может у тебя не нолями забитый файл откроется 🙁

да нули — не знаю, как можно такое сотворить.

Вооот. вынипарериишь! просто сохранил в своё время проекты и оставил так до лучших времен. ХЗ, что это. Тот, что прислал — в мае прошлого года делался. Чудеса в IDE. :))

при чём здесь ИДЕ?

ребята не пойму прикола. вот код

нажимаю 1 раз компилить выходят вот эти ошибки-

C:Program Files (x86)Arduino_newlibrariescyberlibCyberLib.cpp:199:37: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast]

C:Program Files (x86)Arduino_newlibrariescyberlibCyberLib.cpp:200:37: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast]

C:Program Files (x86)Arduino_newlibrariescyberlibCyberLib.cpp: In function ‘uint8_t ReadEEPROM_Byte(uint8_t)’:

C:Program Files (x86)Arduino_newlibrariescyberlibCyberLib.cpp:209:37: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast]

C:Program Files (x86)Arduino_newlibrariescyberlibCyberLib.cpp: In function ‘uint32_t ReadEEPROM_Long(uint8_t)’:

C:Program Files (x86)Arduino_newlibrariescyberlibCyberLib.cpp:220:55: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast]

uint32_t ir_code = eeprom_read_byte((uint8_t*)addr+3);

C:Program Files (x86)Arduino_newlibrariescyberlibCyberLib.cpp:221:63: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast]

ir_code = (ir_code Войдите на сайт для отправки комментариев

Источник

пишет ошибку: error expected unqualified-id before ‘{‘ token скажите что делать пожалуйста.

Тема в разделе «Arduino & Shields», создана пользователем FiRe_0K, 2 янв 2017.

  1. вот скетч:

    const int switchPin = 8;
    const int ledPin = 13;
    boolean lastButton = LOW;
    boolean currentButton = LOW;
    boolean ledOn = false;
    void setup()
    {
      pinMode(switchPin, INPUT);
      pinMode(ledPin, OUTPUT);
    }
    boolean debounce(boolean last);
    {
      boolean current = digitalRead(switchPin);
      if (last != current)
      {
        delay(5);
        curent = digitalRead(switchPin);
      }
      return current;
    }

    void loop()
    {
      currentButton = ddebounce(lastButton);
      if (lastButton == LOW) && currentButton == HIGH)
      {
        ledOn = !ledOn;
      }
        lastButton = currentButton;
      digitalWrite(ledPin, ledOn);
    }

  2. В скетче очень много ошибок. Мне проще написать свой скетч, чем ловить ошибки в вашем.

  3. Понятно… :(

  4. я писал по видео джереми блюма

  5. лишние ; и ), удвоеные (пропущеные)буквы. Да и код джереми блюма ну очень нубский. А пол года я считал его образцом для подражания.

  6. Главная ошибка- невнимательность: curent, ddebounce… лишние скбки и ;

    const int switchPin = 8;
    const int ledPin = 13;
    boolean lastButton = LOW;
    boolean currentButton = LOW;
    boolean ledOn = false;
    void setup()
    {
      pinMode(switchPin, INPUT);
      pinMode(ledPin, OUTPUT);
    }
    boolean debounce(boolean last)
    {
      boolean current = digitalRead(switchPin);
      if (last != current)
      {
        delay(5);
        current = digitalRead(switchPin);
      }
      return current;
    }

    void loop()
    {
      currentButton = debounce(lastButton);
      if (lastButton == LOW && currentButton == HIGH)
      {
        ledOn = !ledOn;
      }
        lastButton = currentButton;
      digitalWrite(ledPin, ledOn);
    }

  7. он у меня не вгружает чёто про байты пишет. :(

  8. Правильно и понятно заданный вопрос — половина правильного ответа. Телепаты еще празднуют. Где последний вариант скетча? Где скриншот вывода компиляции и загрузки?

  9. Только , что попробовал в arduino IDE 1.8.1 — все ок — скомпилилось

  10. если вы сами не знаете тогда и отстаньте от меня со своими скриншотами

Сб, 17/09/2022 — 23:19

#1

v258

v258 аватар

Offline

Зарегистрирован: 25.05.2020

Там же и номера строк с ошибками указываться должны. Но навскидку подскажу — обратите внимание на строки 1 и 8, ошибки в них

  • Войдите на сайт для отправки комментариев

Сб, 17/09/2022 — 23:21

#2

b707

Offline

Зарегистрирован: 26.05.2017

isheev denis — после названия функции точка с запятой лишняя

  • Войдите на сайт для отправки комментариев

Сб, 17/09/2022 — 23:34

#3

isheev denis

Offline

Зарегистрирован: 17.09.2022

теперь пишет redefinition of ‘void setup()’ хотя библиотек у меня нету

  • Войдите на сайт для отправки комментариев

Сб, 17/09/2022 — 23:43

#4

v258

v258 аватар

Offline

Зарегистрирован: 25.05.2020

Еще раз — в строках 1 и 8 уберите точку с запятой. Больше ничего делать не нужно

  • Войдите на сайт для отправки комментариев

Вс, 18/09/2022 — 10:54

#5

isheev denis

Offline

Зарегистрирован: 17.09.2022

void setup()

 {

pinMode (2, OUTPUT);

 }

void loop()

{

digitalWrite(2, HIGH);

delay(1000);

digitalWrite(2, LOW);

delay(300);

}

теперь пишет Compilation error: redefinition of ‘void setup()’ указывая на строки 1 и 8 

  • Войдите на сайт для отправки комментариев

Вс, 18/09/2022 — 11:16

#6

kalapanga

Offline

Зарегистрирован: 23.10.2016

  • Войдите на сайт для отправки комментариев

Вс, 18/09/2022 — 11:32

#7

b707

Offline

Зарегистрирован: 26.05.2017

isheev denis пишет:

теперь пишет Compilation error: redefinition of ‘void setup()’ указывая на строки 1 и 8 

такой ошибки в этом коде нет — значит вы запускаете не этот код. Или и правда, записали два ino файла в одну папку.

И по-хорошему, вам бы для начала какую-нить методичку для чайников почитать — куча проблем решится сама. И только потом в форум писать, а то вопросы. что вы задаете — просто ниже плинтуса

  • Войдите на сайт для отправки комментариев

Вс, 18/09/2022 — 13:42

#8

BOOM

BOOM аватар

Offline

Зарегистрирован: 14.11.2018

А есть они вообще в природе то? Ну методички, что для чайников по ардуино?

  • Войдите на сайт для отправки комментариев

Вс, 18/09/2022 — 13:49

#9

ЕвгенийП

ЕвгенийП аватар

Offline

Зарегистрирован: 25.05.2015

Пальцем считали?

Потом не удивляйтесь, что на голову садятся.

  • Войдите на сайт для отправки комментариев

Вс, 18/09/2022 — 13:52

#10

ЕвгенийП

ЕвгенийП аватар

Offline

Зарегистрирован: 25.05.2015

BOOM пишет:

А есть они вообще в природе то? Ну методички, что для чайников по ардуино?

Конечно. Например.

  • Войдите на сайт для отправки комментариев

Вс, 18/09/2022 — 15:33

#11

isheev denis

Offline

Зарегистрирован: 17.09.2022

  • Войдите на сайт для отправки комментариев

Вс, 18/09/2022 — 16:27

#12

ua6em

ua6em аватар

Offline

Зарегистрирован: 17.08.2016

  • Войдите на сайт для отправки комментариев

Вс, 18/09/2022 — 16:40

#13

ЕвгенийП

ЕвгенийП аватар

Offline

Зарегистрирован: 25.05.2015

ua6em пишет:

про SPI там ни слова )))

А что, должно быть? Там и про захват таймера ни слова!

Просили 

  • Войдите на сайт для отправки комментариев

Вс, 18/09/2022 — 19:57

#14

ua6em

ua6em аватар

Offline

Зарегистрирован: 17.08.2016

ЕвгенийП пишет:

ua6em пишет:

про SPI там ни слова )))

А что, должно быть? Там и про захват таймера ни слова!

Просили 

так это выходит совсем совсем для чайников )))

  • Войдите на сайт для отправки комментариев

Вс, 18/09/2022 — 20:43

#15

BOOM

BOOM аватар

Offline

Зарегистрирован: 14.11.2018

ua6em пишет:

про SPI там ни слова )))

Отходи от компьютера иногда. В этой теме о spi ни слова…

  • Войдите на сайт для отправки комментариев

Вс, 18/09/2022 — 20:56

#16

ua6em

ua6em аватар

Offline

Зарегистрирован: 17.08.2016

BOOM пишет:

ua6em пишет:

про SPI там ни слова )))

Отходи от компьютера иногда. В этой теме о spi ни слова…

а я что делаю, сегодня подготовку под бетонирование, пока на улице до +35 не поднялось…

  • Войдите на сайт для отправки комментариев

Понравилась статья? Поделить с друзьями:
  • Ошибка ое на стиральной машинке лджи
  • Ошибка ое на стиральной машине элджи
  • Ошибка ое на машинке lg при отжиме что
  • Ошибка ое на машинке lg не сливает
  • Ошибка однокоренные слова подобрать