-1

私は盲目であるか、エラーはありません。おそらくそれが最初の選択肢になると思います。干し草の山から針を見つけるのを手伝ってください。これは私のエラーリストの一部です:

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;
}

コード全体で同様のエラーがもっとたくさんあるので、何かの列が欠落しているようなものがあると思います。見ますか?私はしません。

4

4 に答える 4

5

他の答えは正しいです問題はシンボリック定数です

#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
};
于 2013-03-25T23:19:17.947 に答える
4

あなた#defineのは正しくありません、それらは次のように見えるはずです、例えば:

#define ERR_PARAMS 1

つまり、=セミコロンで終わらないようにする必要があります。#defineプリプロセッサディレクティブです。これらは、他のC++と同じ構文規則には従いません。特に、プリプロセッサディレクティブは、セミコロンではなく、改行で終了します。

#define ERR_PARAMS = 1;

これは実際にはであると定義ERR_PARAMSしています= 1;。その後、コード内でを置き換えるERR_PARAMS= 1;、エラーの一部がポップアップする理由がわかります。たとえば、次の行について考えてみます。

printErr(ERR_PARAMS);

ここで置き換えるERR_PARAMSと、次のようになります。

printErr(= 1;);

まあ、それは確かに正しくありません!

于 2013-03-25T23:12:40.393 に答える
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

マクロは変数ではありません。値を保持しません。これは前処理機能です。

どこでも構文エラーが発生するのは、たとえばなどERR_OKが置き換えられていたためです。= 0;0

于 2013-03-25T23:12:56.707 に答える
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
于 2013-03-25T23:17:00.663 に答える