19

我收到一个错误extra qualification ‘student::’ on member ‘student’ [-fpermissive]
还有为什么name::name在构造函数中使用这种语法?

#include<iostream>
#include<string.h>
using namespace std;
class student
{
 private:
     int id;
     char name[30];
 public:
/*   void read()
     {
        cout<<"enter id"<<endl;
        cin>>id;
        cout<<"enter name"<<endl;
        cin>>name;
     }*/
     void show()
     {
        cout<<id<<name<<endl;
     }
     student::student()
     {
        id=0;
        strcpy(name,"undefine");
     }
};
main()
{
 student s1;
// s1.read();
 cout<<"showing data of s1"<<endl;
 s1.show();
// s2.read();
  //cout<<"showing data of s2"<<endl;
 //s2.show();
}
4

3 回答 3

41

成员函数/构造函数/析构函数的类内定义不需要诸如student::.

所以这段代码,

 student::student()
 {
    id=0;
    strcpy(name,"undefine");
 }

应该是这样的:

 student()
 {
    id=0;
    strcpy(name,"undefine");
 }

仅当您在类之外定义成员函数时才需要限定student::,通常在 .cpp 文件中。

于 2012-07-27T17:38:18.743 回答
3

如果构造函数的定义出现在类定义之外,那将是正确的。

于 2012-07-27T17:38:55.687 回答
0

类似代码:


更改自:

class Solution {
public:
  static int Solution::curr_h; // ----------------- ISSUE: "Solution::" is extra
  static int Solution::curr_m; // ----------------- ISSUE: "Solution::" is extra
};

int Solution::curr_h = 0;
int Solution::curr_m = 0;

至:

class Solution {
public:
  static int curr_h;  // ----------------- FIX: remove "Solution::"
  static int curr_m;  // ----------------- FIX: remove "Solution::"
};

int Solution::curr_h = 0; // <------ good here - "Solution::" is required
int Solution::curr_m = 0; // <------ good here - "Solution::" is required

  • 发生这种情况是因为复制粘贴static需要在类之外进行初始化,但也需要所有声明 ( int)。
  • 虽然它是正确的,但希望有一种更简单/更好的方法来做同样的事情。
于 2020-11-19T02:02:17.057 回答