ошибка: ожидаемое первичное выражение до токена ‘=’ и многие другие

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

server.cpp: In function ‘int main(int, char**)’:
server.cpp:64:16: error: expected primary-expression before ‘=’ token
server.cpp:71:14: error: expected primary-expression before ‘=’ token
server.cpp:71:24: error: expected primary-expression before ‘)’ token
server.cpp:71:24: error: expected ‘;’ before ‘)’ token
server.cpp:72:12: error: expected primary-expression before ‘=’ token
server.cpp:80:10: error: expected primary-expression before ‘=’ token
make: *** [server] Error 1

и это часть моего кода:

#include <sys/types.h>
#include <sys/socket.h>
#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
#include <netdb.h>
#include <iostream>
#include <regex.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <string.h>
#include <string>
#include <stdlib.h>
#include <locale.h>
#include <cstring>
#include <signal.h>
#include <dirent.h>

using namespace std;

/* global variables */
// error codes
#define ERR_OK = 0;
#define ERR_PARAMS = 1;
#define ERR_SOCKET = 2;
#define ERR_BIND = 3;
#define ERR_OTHER = 99;

// others
#define LISTEN_BACKLOG 50

/* function prototypes */
void printErr(int EC);
int second(int port);

int main(int argc, char **argv)
{
int pflag = 0;
string pvalue;
int port;
int c;

opterr = 0;
while((c = getopt (argc, argv, "p:")) != -1) {
switch(c) {
case 'p':
pflag = 1;
pvalue.assign(optarg);
break;
case '?':
if(optopt == 'c')
fprintf(stderr, "Option -%c requires an argument.\n", optopt);
else if(isprint (optopt))
fprintf(stderr, "Unknown option `-%c'.\n", optopt);
else
fprintf(stderr, "Unknown option character `\\x%x'.\n", optopt);
return ERR_PARAMS;
default:
abort();
}
}

if(pflag == 0) {
printErr(ERR_PARAMS);
return ERR_PARAMS;
}
printf ("pvalue = %s\n", pvalue.c_str());

port = atoi(pvalue.c_str());

second(port);

return ERR_OK;
}

У меня есть много подобных ошибок во всем коде, поэтому я думаю, что есть что-то вроде пропуска столбца или чего-то другого. Вы видите это? Я не.

-1

Решение

#define ERR_OK = 0;
#define ERR_PARAMS = 1;
#define ERR_SOCKET = 2;
#define ERR_BIND = 3;
#define ERR_OTHER = 99;

должно быть

#define ERR_OK 0
#define ERR_PARAMS 1
#define ERR_SOCKET 2
#define ERR_BIND 3
#define ERR_OTHER 99

Макрос не является переменной. Это не имеет значения. Это функция предварительной обработки.

Причина, по которой у вас везде появляются синтаксические ошибки, заключается в том, что ERR_OK и тому подобное были заменены = 0; скорее, чем 0 например.

4

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

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

#define ERR_OK = 0;
#define ERR_PARAMS = 1;
#define ERR_SOCKET = 2;
#define ERR_BIND = 3;
#define ERR_OTHER = 99;

Тем не менее, в C ++ есть лучший способ исправить это:

const int ERR_OK = 0;
const int ERR_PARAMS = 1;
const int ERR_SOCKET = 2;
const int ERR_BIND = 3;
const int ERR_OTHER = 99;

Или C и C ++ оба позволяют

enum ERROR_CODES {
ERR_OK,
ERR_PARAMS,
ERR_SOCKET,
ERR_BIND,
ERR_OTHER = 99
};
5

Ваш #defines неверны, они должны выглядеть следующим образом, например:

#define ERR_PARAMS 1

То есть они не должны иметь = и не заканчивается точкой с запятой. #define это директива препроцессора. Они не подчиняются тем же правилам синтаксиса, что и остальная часть C ++. В частности, директива препроцессора завершается новой строкой, а не точкой с запятой.

#define ERR_PARAMS = 1;

Это на самом деле определяет ERR_PARAMS быть = 1;, Если потом заменить ERR_PARAMS с = 1; в своем коде вы увидите, почему всплывают некоторые ошибки. Например, рассмотрим эту строку:

printErr(ERR_PARAMS);

Если вы замените ERR_PARAMS здесь вы получите:

printErr(= 1;);

Ну, это, конечно, не правильно!

4

#define ERR_OK = 0;
#define ERR_PARAMS = 1;
#define ERR_SOCKET = 2;
#define ERR_BIND = 3;
#define ERR_OTHER = 99;

должно быть

#define ERR_OK 0
#define ERR_PARAMS 1
#define ERR_SOCKET 2
#define ERR_BIND 3
#define ERR_OTHER 99
1
По вопросам рекламы [email protected]