Ошибка ожидаемое первичное выражение перед токеном

Я пытаюсь вызвать пустую функцию с именем correction(original,corrected) и когда я пытаюсь скомпилировать его, я получаю пару ошибок вида:

ошибка: ожидаемое первичное выражение перед токеном ‘}

Вот мой полный код:

    #include <cstdio>
#include <iostream>
#include <fstream>
#include <cstdlib>
#include <string>

using namespace std;

void correction(ifstream& original,ofstream& corrected);

int main ()
{
ifstream original;
ofstream corrected;
char filename[16];
cout<<"Enter filename:\n";
cin>>filename;
original.open(filename);
corrected.open("corrected.txt");
if (original.fail( ))
{
cout << "Input file opening failed.\n";
exit(1);
}
if (corrected.fail( ))
{
cout << "Input file opening failed.\n";
exit(1);
}
else
{
correction(original,corrected);
}
return 0;
}

void correction(ifstream& original,ofstream& corrected)
{
char symbol;
while(! original.eof())
{
original.get(symbol);
if (symbol== 'c')
{
corrected.put(symbol);
original.get(symbol);
if (symbol=='i')
{
corrected.put(symbol);
original.get(symbol);
if (symbol=='n')
{
corrected.put(symbol);
original.get(symbol);
while (symbol==' ')
{
original.get(symbol);
}
for (symbol=='<')
{
corrected.put('>');
original.get(symbol);
}
corrected.put(symbol);
}
}
if (symbol=='o')
{
corrected.put(symbol);
original.get(symbol);
if (symbol=='u')
{
corrected.put(symbol);
original.get(symbol);
if (symbol=='t')
{
corrected.put(symbol);
original.get(symbol);
while (symbol==' ')
{
original.get(symbol);
}
for (symbol=='>')
{
corrected.put('<');
original.get(symbol);
}
corrected.put(symbol);
}
}
}
}
else
corrected.put(symbol);
}
return;
}

Когда я пытаюсь скомпилировать этот код, я получаю следующие ошибки:

operator.cpp: 59: 23: ошибка: ожидается токен ‘;’ before ‘) ‘
для (символ == ‘<«)
^ operator.cpp: 65: 5: ошибка: ожидаемое первичное выражение перед токеном ‘}’
}
^ operator.cpp: 65: 5: ошибка: ожидается ‘)’ до ‘}’ token>> operator.cpp: 65: 5: ошибка: ожидается основное выражение до ‘}’
знак
operator.cpp: 65: 5: ошибка: ожидается токен ‘;’ before ‘}’
operator.cpp: 83: 20: ошибка: ожидается токен ‘;’ before ‘)’
для (символ == ‘>’)
^ operator.cpp: 89: 9: ошибка: ожидаемое первичное выражение перед токеном ‘}’
}
^ operator.cpp: 89: 9: ошибка: ожидается ‘)’ до ‘}’ token operator.cpp: 89: 9: ошибка: ожидается основное выражение до ‘}’
token operator.cpp: 89: 9: ошибка: ожидается ‘;’ перед ‘}’ токеном

Я новичок в программировании и потратил пару часов, пытаясь это исправить, но я не понимаю, в чем проблема.

Любая помощь очень ценится!

-4

Решение

Добавил позже, внимательно изучив ответ @ liup:

О, мой плохой, ОП, вероятно, действительно имел в виду использовать цикл здесь! Затем вы можете использовать цикл while следующим образом:

while (symbol=='<')

а также

while (symbol=='>')

Старый ответ:

Вот:

if (symbol=='<')

и здесь:

if (symbol=='>')

Вместо for (symbol=='<') а также for (symbol=='>'),

Ошибка связана с тем, что в for цикл, вы должны иметь все три предложения, даже если они пусты, следовательно, две точки с запятой ; обязательны Вы только при условии один не предоставил ни одной точки с запятой в каждом из двух неправильных for заявления.

Для справки см. для описания цикла в cppreference

1

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

И то и другое for (symbol=='<') а также for (symbol=='>') неправильный синтаксис цикла. В этом сценарии вы можете использовать для цикла следующим образом.

for (; symbol == '<';)
{
corrected.put('>');
original.get(symbol);
}

for (; symbol == '>';)
{
corrected.put('<');
original.get(symbol);
}

ИЛИ ЖЕ

for (; symbol == '<';original.get(symbol))
{
corrected.put('>');

}

for (; symbol == '>';original.get(symbol))
{
corrected.put('<');

}

1

I have tried many times to solve this problem but i got nothing.

The main purpose of this code is saving pair keys (Public and Private) in nested class NslObject::KeyK or NewKeyPair1.

.cpp file

        unsigned long int keyLength = 10;
        //KeyPair ADD(RSA::GenerateKeyPair(keyLength));
        NslObject::KeyK(RSA::GenerateKeyPair(keyLength));
        typedef NslObject::KeyK NewKeyPair1; 
        NewKeyPair1(RSA::GenerateKeyPair(keyLength));

        //NslObject::
        Key OtmanK(NslObject::Get_PublicKey(NewKeyPair1));

.h file:

 #ifndef    __NCTUNS_nslobject_h__
 #define __NCTUNS_nslobject_h__

 #include <stdio.h>
 #include <event.h>

 //---------------------------------------------------
 #include <cstdlib>      //srand()
 #include <iostream>     //cout
 #include <ctime>        //time()
 #include <cstring>      //strcmp()
 //#include "test.h"       //testing functions
 #include "RSA.h"        //GenerateKeyPair()
 #include "PrimeGenerator.h"     //Generate()
 //#include <stdio.h>
 #include <stdlib.h>
 #include <sstream> 
 #include <string>


 //---------------------------------------------------

 class MBinder;

  struct plist {
u_int8_t        pid;
struct plist            *next;
 };

  struct MBlist {
u_int8_t    portnum;
MBinder     *sendt;
struct MBlist   *next;
 };
 /*=========================================================================
 Define Macros
 =========================================================================*/
 #define DISABLED       0x00
 #define ENABLED            0x01


 /*=========================================================================
 Define Class ProtoType
 =========================================================================*/

 class NslObject {

 private: 

char        *name_;     /* Instance name */
const u_int32_t nodeID_;    /* Node Id */
const u_int32_t nodeType_;  /* Node type, eg: SWITCH, HOST.. */
u_int32_t   portid_;    /* port Id */
struct plist    *MPlist_;
   // static  KeyPair  NewKeyPair;


  public :
/* add for new structure engine*/
    u_int32_t       pdepth;
    struct MBlist   *BinderList;
    u_int8_t       PortNum;

//------------------------------------------------
    class KeyK {
    private :
         KeyPair Kk; 

    public:

      KeyK( KeyPair D1): Kk(D1)
      {}

     const  Key &GetPrivateKey() const
            {
                    return Kk.GetPrivateKey();
            }

     const  Key &GetPublicKey() const
            {
                    return Kk.GetPublicKey();
            }

       //KeyK  NewKeyPair ;


     };

     Key Get_PrivateKey(KeyK &K){
        return K.GetPrivateKey();
     }
      Key Get_PublicKey(KeyK &K){
        return K.GetPublicKey();
     }


    //static KeyPair  *KeyPtr1 ;//= new KeyPair;
    //------------------------------------------------
u_char          s_flowctl;      /* flow control for sending pkt */
u_char          r_flowctl;      /* flow control for receiving pkt */

MBinder     *recvtarget_;   /* to upper component */
MBinder     *sendtarget_;   /* to lower component */


NslObject(u_int32_t, u_int32_t, struct plist*, const char *);
NslObject();
virtual         ~NslObject();   
virtual int     init();
virtual int     recv(ePacket_ *); 
virtual int     send(ePacket_ *); 
virtual int     get(ePacket_ *, MBinder *);
virtual int     put(ePacket_ *, MBinder *);
virtual ePacket_    *put1(ePacket_ *, MBinder *);
virtual int     command(int argc, const char *argv[]); 
virtual int     Debugger();


inline  void    set_port(u_int32_t portid) { 
        portid_ = portid; 
    };   
inline u_int32_t get_port() const { 
        return(portid_); 
    }; 
inline struct plist* get_portls() const {
        return(MPlist_);
    };
inline const char * get_name() const {
        return(name_);
    }
inline u_int32_t get_nid() const {
        return(nodeID_);
    }
inline u_int32_t get_type() const {
        return(nodeType_);
    }
    //--------------------------------------------------------





  };

so, the problem in this line in cpp file :

 Key OtmanK(NslObject::Get_PublicKey(NewKeyPair1));

when i tried to compile this project, i got this Error message:

 object.cc:87: error: expected primary-expression before ‘)’ token

please, help me.

when i tried to make a directed call for key class, the other problem was appeared such as :

        unsigned long int keyLength = 10;
        //KeyPair ADD(RSA::GenerateKeyPair(keyLength));
        NslObject::KeyK(RSA::GenerateKeyPair(keyLength));
        typedef NslObject::KeyK NewKeyPair1; 
        NewKeyPair1(RSA::GenerateKeyPair(keyLength));

        //NslObject::
        //Key OtmanK(NewKeyPair1.GetPublicKey());
        std::string message = "othman Alkilany";
        // NslObject::NewKeyPair.GetPrivateKey()
       std::string cypherText = RSA::Encrypt(  message, NewKeyPair1.GetPublicKey());

the Error Message is :

  error: expected primary-expression before ‘.’ token

proposed code corrections:

search for: ‘<<—‘ to find corrections

#define lefttrig 13
#define leftecho 12
#define righttrig 9
#define rightecho 8


int leftred = 4;
int leftgreen = 5;
int rightred = 6;
int rightgreen = 7;


#include <SoftwareSerial.h> //эту библиотеку надо скачать
#include <TinyGPS.h> //эту библиотеку надо скачать

SoftwareSerial mySerial(2, 3); // RX, TX от модуля
TinyGPS gps;

void gpsdump(TinyGPS gps);
void printFloat(double f, int digits = 2);


void setup()
{
    mySerial.begin(9600);
    pinMode(lefttrig, OUTPUT); //инициируем как выход
    pinMode(leftecho, INPUT); //инициируем как вход
    pinMode(righttrig, OUTPUT); //инициируем как выход
    pinMode(rightecho, INPUT); //инициируем как вход
    pinMode(leftred, OUTPUT);
    pinMode(leftgreen, OUTPUT);
    pinMode(rightred, OUTPUT);
    pinMode(rightgreen, OUTPUT);
    digitalWrite(leftgreen, HIGH) ; // led system diagnostic
    digitalWrite(leftred, HIGH) ; // led system diagnostic
    digitalWrite(rightgreen, HIGH) ; // led system diagnostic
    digitalWrite(rightred, HIGH) ; // led system diagnostic
    delay(2000);
    digitalWrite(leftgreen, LOW) ; // led system diagnostic
    digitalWrite(rightgreen, LOW) ; // led system diagnostic
    delay(2000);
    digitalWrite(leftred, LOW) ; // led diagnostic ok
    digitalWrite(rightred, LOW) ; // led diagnostic ok
}


unsigned int impulseTimeleft =0;
unsigned int distanceleft    =0;
unsigned int impulseTimeright=0;
unsigned int distanceright   =0;

void loop()
{
    bool newdata = false;
    unsigned long start = millis();

    if (mySerial.available())
    {
        char c = mySerial.read();

        if (gps.encode(c))
        {
            newdata = true;
        }
    }

    if (newdata)    // <<-- removed: '= true'
    { //если спутники доступны
        workonspeed(); //запуск программы чтения скорости
    }

    if  (!newdata)  // <<-- replaced: '(newdata) = false'
    { //если спутники недоступны, движение в тоннеле например
        sonarleft (); //запуск программы левого сонара
        sonarright ();
    }
} // <<-- inserted missing close brace '}'


void workonspeed()
{
    if (gps.f_speed_kmph()>10)
    { //если скорость по спутнику более 10кмч
        sonarleft (); //запуск программы левого сонара
        sonarright ();
    }
}


void sonarleft ()
{ //левый сонар, чтение дистанции
    digitalWrite(lefttrig, HIGH);
    delayMicroseconds(10); // равный 10 микросекундам
    digitalWrite(lefttrig, LOW);
    impulseTimeleft=pulseIn(leftecho, HIGH); // Замеряем длину импульса
    distanceleft=impulseTimeleft/58; // Пересчитываем в сантиметры

    if (distanceleft<=150)
    {
        digitalWrite(leftred, HIGH) ; // red left led on
        delay(2000);
    }

    else
    {
        digitalWrite(leftred, LOW) ; // red left led off
    }

    if ((distanceleft>=150) && (distanceleft<350 ))
    {
        digitalWrite(leftred, HIGH) ; // red left led on
        digitalWrite(leftgreen, HIGH) ; // green left led on
    }

    else
    {
        digitalWrite(leftgreen, LOW) ; // green left led off
    }

    delay(100);
}


void sonarright()
{ //правый сонар, чтение данных
    digitalWrite(righttrig, HIGH);
    delayMicroseconds(10); // равный 10 микросекундам
    digitalWrite(righttrig, LOW);// Отключаем
    impulseTimeright=pulseIn(rightecho, HIGH); // Замеряем длину импульса
    distanceright=impulseTimeright/58; // Пересчитываем в сантиметры

    if (distanceright<=150) // right distance closer 60 cm
    {
        digitalWrite(rightred, HIGH) ; // red right led on
        delay(2000);
    }

    else
    {
        digitalWrite(rightred, LOW) ; // red right led on
    }

    if ((distanceright>=150) && (distanceright<350 ))
    {
        digitalWrite(rightred, HIGH) ; // red right led on
        digitalWrite(rightgreen, HIGH) ; // green right led on
    }

    else
    {
        digitalWrite(rightgreen, LOW) ; // green right led on
    }

    delay(100);
}

Ошибка компиляции C++: expected primary-expression before ‘)’ token

В процессе разработки приложений на C++ вы наверняка столкнулись с ошибками компиляции. Одной из таких ошибок является «expected primary-expression before ‘)’ token» или «ожидается первичное выражение перед токеном ‘)'».
Эта ошибка указывает на то, что в вашем коде компилятор ожидал обнаружить первичное выражение (такое как переменная, литерал или вызов функции) перед символом ‘)’ (закрывающая круглая скобка), но не смог найти его.

Давайте рассмотрим несколько распространенных причин возникновения этой ошибки и способы ее исправления.

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

int sum = (3 + 5);) // ошибка

В этом примере после закрывающей скобки ‘)’ намеренно добавлен лишний символ ‘)’, что приводит к ошибке компиляции. Для исправления достаточно удалить этот символ:

int sum = (3 + 5); // исправлено

Также может возникнуть ошибка, если вы вызываете функцию с неверным числом аргументов или передаете неверные аргументы. Например:

int add(int a, int b) {
  return a + b;
}

int result = add(5); // ошибка: недостаточно аргументов

В этом примере функции «add» требуется два аргумента, но в вызове передается только один аргумент. Чтобы исправить ошибку, убедитесь, что все аргументы переданы правильно:

int result = add(5, 10); // исправлено

2. Ошибки в синтаксисе
Еще одной распространенной причиной ошибки «expected primary-expression before ‘)’ token» являются ошибки в синтаксисе. Например:

if (x > 5); { // ошибка
  // код
}

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

if (x > 5) { // исправлено
  // код
}

Также убедитесь, что вы правильно используете скобки в выражениях, чтобы указать приоритет операций. Например:

int result = (2 + 3) * 4); // ошибка: лишний символ ')'

В этом примере после закрывающей скобки ожидается оператор, но вместо этого присутствует символ ‘)’. Для исправления удалите этот символ:

int result = (2 + 3) * 4; // исправлено

3. Пропущенные точки с запятой
Еще одной возможной причиной ошибки «expected primary-expression before ‘)’ token» могут быть пропущенные точки с запятой в вашем коде. Например:

int a = 5 // ошибка: пропущена точка с запятой
int b = 10;

В этом примере после инициализации переменной «a» пропущена точка с запятой, что приводит к ошибке компиляции. Чтобы исправить ошибку, добавьте пропущенную точку с запятой:

int a = 5; // исправлено
int b = 10;

Убедитесь, что точки с запятой присутствуют после каждого оператора или объявления переменной.

В заключение, ошибка компиляции «expected primary-expression before ‘)’ token» может возникать по разным причинам: неправильное использование функций или операторов, ошибки в синтаксисе или пропущенные точки с запятой. Найдите причину, исправьте ее и перекомпилируйте ваш код.

Вопрос:

Я получаю много ошибок в строках “ошибка: ожидаемое первичное выражение перед”, “токен”, где я использую функцию getline в своем коде. Я посмотрел на некоторые примеры людей, использующих getline в ifstreams, и я подумал, что, возможно, мне пришлось поставить “std ::” перед вызовом функции (не совсем уверен, что это будет делать?), Но это тоже не сработало.

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

#include <stdio.h>
#include <iostream>
#include <fstream>
#include <string>
using namespace std;

struct ListNode{
string user;
string salt;
string encrypted;
string password;
ListNode* next;
};


int main(){

/* Initializes singly linked list to hold user data */
ListNode *root;
ListNode *conductor;
root = new ListNode;
conductor = root;

string temp;

//creates and opens filestream to password file
ifstream psswdFile ("example.txt");

if(psswdFile.is_open()){
//we assume there is at least one line, and initialize the head of
//the list
std::getline(psswdFile&, (conductor->user)&, ':');
std::getline(psswdFile&, (conductor->salt)&, ':');
std::getline(psswdFile&, (conductor->encrypted)&);

Лучший ответ:

Похоже, вы неправильно поняли, как передаете ссылки на параметры C++. В отличие от указателей, которые обычно вам нужны, чтобы получить адрес с помощью оператора &, функции, которые берут ссылки, вам не нужны: просто передайте присваиваемое выражение:

std::getline(psswdFile, conductor->user, ':');

Компилятор имеет прямое объявление вашей функции, поэтому он знает, как передавать все, что вы передаете по ссылке.

Понравилась статья? Поделить с друзьями:

Интересное по теме:

  • Ошибка оверлей steam недоступен или отключен
  • Ошибка ое на машинке lg не сливает воду
  • Ошибка объединения перекрывающихся диапазонов excel
  • Ошибка обновления регионов показа
  • Ошибка овердрайв на коробке автомат

  • 0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии