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

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

У меня проблемы с решением неизвестной проблемы, с которой я никогда не сталкивался на 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

80.1k9 золотых знаков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

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