错误 C2143 和错误 C2059 缺少“;”前 ””

Posted

技术标签:

【中文标题】错误 C2143 和错误 C2059 缺少“;”前 ””【英文标题】:error C2143 and error C2059 missing ";" before ""错误 C2143 和错误 C2059 缺少“;”前 ”” 【发布时间】:2014-09-25 18:02:09 【问题描述】:

我无法编译它。我不知道发生了什么,这对我来说似乎很好。我得到的错误:

error C2059: syntax error ""
error C2143: syntax error: missing ";" before ""
error C2143: syntax error: missing ";" before ""

X.h

   class X
    
        friend symbol;
    public:
        X();
    private:
        int tab[4][3];
    ;

X.cpp

X::X()

    tab[4][3]=0,1,0,1,0,1,2,-1,0,3,0,-1;

哪里出了问题?

【问题讨论】:

您使用的是哪个版本的 VC++? VC++6、VS2005 C++、VS2010 C++ ..等? 【参考方案1】:

您的tab[4][3]=0,1,0,1,0,1,2,-1,0,3,0,-1; 有几个问题。

    tab[4][3] 试图引用 tab 的一个元素,而不是整个数组。 它的索引超出范围——tab 定义为tab[4][3],合法索引从tab[0][0] 运行到tab[3][2]。 您正在尝试分配一个数组,这(即使您修复了前面的问题)是不可能的。

【讨论】:

【参考方案2】:

如果 C++11 可供您使用,您可以使用此语法

X() : tab 0,1,0,1,0,1,2,-1,0,3,0,-1 

【讨论】:

Visual C++ 2013(正式版)尚未完全兼容 C++11,因此失败了。以前版本的 VS C++ 不太兼容【参考方案3】:

您尝试做的事情基本上可以使用符合 C++11 的 C++ 编译器来完成。不幸的是,您使用的是 Visual C++(不确定是哪个版本),但这种事情还不适用于任何官方版本的 VC++。如果 VC++完全符合 C++11,这将是可行的:

private:
    int tab[4][3] 0,1,0,1,0,1,2,-1,0,3,0,-1;
;

碰巧下面的代码确实适用于符合 C++11 的编译器,但它也适用于从 VS2013 开始的 VC++。可能更适合您的是使用std::array

#include <array>

class X 
  friend symbol;
  public:
    X();
  private:
    // Create int array with 4 columns and 3 rows.
    std::array<std::array<int, 3>, 4> tab;
;


X::X()

    // Now initialize each row
    tab[0] =  0, 1, 0 ;   // These assignments will not work on Visual studio C++
    tab[1] =  1, 0, 1 ;   //     earlier than VS2013
    tab[2] =  2, -1, 0 ;  // Note the outter   is used to denote
    tab[3] =  3, 0, -1 ;  //     class initialization (std::arrays is a class)

    /* This should also work with VS2013 C++ */
    tab =    0, 1, 0 , 
               1, 0, 1 , 
               2, -1, 0 , 
               3, 0, -1   ;

我通常使用vector 代替int tab[4][3]; 之类的数组,这可以被视为向量的向量。

#include <vector>

class X 
  friend symbol;
  public:
    X();
  private:
    std::vector < std::vector < int >>tab;
;


X::X()

    // Resize the vectors so it is fixed at 4x3. Vectors by default can
    // have varying lengths.
    tab.resize(4);
    for (int i = 0; i < 4; ++i)
        tab[i].resize(3);

    // Now initialize each row (vector)
    tab[0] =  0, 1, 0 ;
    tab[1] =  1, 0, 1 ;
    tab[2] =  2, -1, 0 ;
    tab[3] =  3, 0, -1 ;

【讨论】:

以上是关于错误 C2143 和错误 C2059 缺少“;”前 ””的主要内容,如果未能解决你的问题,请参考以下文章

C2143 类型的错误 - 在 '<' 之前缺少 ','

MFC error C2143: 语法错误 : 缺少“;”(在“*”的前面)

Windows Visual C++ 2019 试图传递预处理器变量(Linux 中的 -D)错误 C2143:语法错误:缺少 ';'在“常数”之前

error C2143: 语法错误 : 缺少“;”(在“&”的前面)

VS编译错误:error C2143: 语法错误 : 缺少“;”(在“类型”的前面)

error C2143: 语法错误 : 缺少“;”(在“return”的前面)是怎么回事?