c ++代码中的错误以及如何解决它们

时间:2013-07-11 20:22:35

标签: c++ visual-c++

我对C ++中的一些代码有一点小问题 它不会编译,我的编程技能现在不是太高, 如果你能帮助我,我会感激不尽。 Ty提前。

问题是错误是什么,以及如何修复代码

#include<iostream>
using namespace std;
struct S {
      S(int i){ this->x = i;}
      ~S(){}
    int x;
    static const int sci = 200;
    int y = 999; 
}
void main(){
    S *ps = new S(300);
    ps->x = 400;

    S s;
    s.x = 500;
}

编译器输出:

8   13  [Warning] non-static data member initializers only available with -std=c++11 or -std=gnu++11 [enabled by default]
9   1   [Error] expected ';' after struct definition
10  11  [Error] '::main' must return 'int'
In function 'int main()':
14  7   [Error] no matching function for call to 'S::S()'
14  7   [Note] candidates are:
4   7   [Note] S::S(int)
4   7   [Note] candidate expects 1 argument, 0 provided
3   8   [Note] S::S(const S&)
3   8   [Note] candidate expects 1 argument, 0 provided

======== AFTERMATCH;)===========

代码:

#include<iostream>
using namespace std;
struct S {
    S() : x() {}       // default constructor
    S(int i) : x(i) {} // non-default constructor
    ~S(){} // no need to provide destructor for this class
    int x;
    static const int sci = 200;
    int y = 999; // Only valid since C++11
}; // ; after class definition.
int main(){
    S *ps = new S(300);
    ps->x = 400;

    S s;
    s.x = 500;
}

以及:

#include<iostream>
using namespace std;
struct S {
    S(int i){
        this->x = i;
    }
    ~S(){}
    int x;
    static const int sci = 200;
    int y = 999;
};
int main(){
    S *ps = new S(300);
    ps->x = 400;
    S *s = new S(20);
    s->x = 500;
}

工作! TY到juanchopanza,Paul Renton以及其他所有不遗余力帮助我的人!

3 个答案:

答案 0 :(得分:3)

由于您已声明了非默认构造函数,因此编译器不再为您生成一个。所以你需要提供一个默认的。这条线需要它。

S s;

您还应该使用构造函数初始化列表,如此注释示例

struct S {
    S() : x() {}       // default constrictor
    S(int i) : x(i) {} // non-default constructor
      ~S(){} // no need to provide destructor for this class
    int x;
    static const int sci = 200;
    int y = 999; // Only valid since C++11
}; // ; after class definition.

您的代码使用一个C ++ 11功能,即在声明点初始化非静态数据成员。为此,您需要传递-std+c++11标志。

此外,void main()无效C ++。 main()必须返回int

答案 1 :(得分:1)

编译器错误也说明的事情

您必须使用半冒号完成结构声明,就像关闭类定义一样。

所以,

struct S {
  S(int i){ this->x = i;}
  ~S(){}
int x;
static const int sci = 200;
int y = 999; 
}; // add semi colon

此外,您提供了一个构造函数,因此编译器不再为您生成默认值。

所以,     S s; 无效,您需要提供默认构造函数或为x提供默认值(如果没有给出。

struct S {
  S(int i = 3){ this->x = i;} // Add a default value
  ~S(){}
int x;
static const int sci = 200;
int y = 999; 
};

修改:由millsj建议

另外, 如果要在struct

中设置默认值,则需要使用-std = c ++ 11标志
int y = 999; // Only valid in C++11

最后,

您希望使用main返回int, void。

int main() // not void main()

希望这一切都有帮助!我们一度都是初学者。

答案 2 :(得分:0)

#include<iostream>
using namespace std;
struct S {
      S(int i){ this->x = i;}
      ~S(){}
    int x;
    static const int sci = 200;
    int y = 999; //<-- c++11, use the -std=c++11 flag on the compiler command line.
}; //<-- need a semicolon
int main(){ //<-- main must return int
    S *ps = new S(300);
    ps->x = 400;

    S s(500); //<-- must supply parameter since there is no default constructor.
    s.x = 500;

    delete ps; //<-- need to delete memory allocated with `new`

    return 0; //<-- main must return int
}

这看起来像列出的错误。如果您修复这些并重新编译,可能会有更多。