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;
Следующие вещи, которые я сделал:
-
Удалил
[]
позадиop
исправить синтаксическую ошибку. -
Изменил
int
вint16_t
, Это гарантирует, что этот код работает и на не 16-битных платформах. -
добавленной
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;
Следующие вещи, которые я сделал:
-
Удалил
[]
позадиop
исправить синтаксическую ошибку. -
Изменил
int
вint16_t
, Это гарантирует, что этот код работает и на не 16-битных платформах. -
добавленной
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 получает выбранные строки таблицы из флажков
Вчера написал программу, всё было хорошо, работала нормально. Сегодня решил кое-что в ней доделать, как выяснилось, что теперь там появилась ошибка, хотя код не редактировался с момента последнего «удачного» запуска.
Теперь выдаёт такую ошибку:
[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;
}
задан 16 мар 2016 в 12:19
6
Уберите в конце этой строки
//============================================================\
две обратные наклонные черты, чтобы было вот так
//============================================================
И все у Вас получится
Причина кроется в том, что символ обратной косой черты () — это символ продолжения строки, если он стоит в конце строки. Все строки, заканчивающиеся обратной косой чертой (
), за которыми сразу следует символ новой строки, объединяются со следующей строкой в исходном файле, формируя логические строки из физических строк. (MSDN)
Grundy♦
80.1k9 золотых знаков77 серебряных знаков133 бронзовых знака
ответ дан 16 мар 2016 в 12:32
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