我想在一个私有的类中声明一个struct,我想给同一个struct中的变量赋一个字符值,但我不能初始化它或者cin it:
class puple
{
private:
struct p
{
char name[25];
int grade;
};
public:
puple(){};
void setme()
{
this->p::grade=99;
this->p::name[25]='g'; //here is the problem
}
void printme()
{
cout<<"Name: "<<this->p::name<<endl;
cout<<"Grade: "<<this->p::grade<<endl;
}
};
void main()
{
puple pu1;
pu1.setme();
pu1.printme();
}
答案 0 :(得分:20)
您已经描述了一个名为“p”的类型,它是一个结构。还没有类型p的东西。因此你的
p->...
电话毫无意义。
尝试声明
p pInstance;
在你班上并使用它,即:
void setme()
{
this->pInstance.grade=99;
this->pInstance.name[25]='g'; //here is the problem
}
请注意,即使这样,您对名称[25]的赋值也会失败,因为该数组的允许索引为0到24(总共25个元素)。
答案 1 :(得分:14)
这里有两个严重的问题
struct p
{
char name[25];
int grade;
};
这定义了一个结构类型,名为p。我想你想做的是
struct
{
char name[25];
int grade;
} p;
这将声明一个名为p的 struct ,其中包含名称和成员成员变量。
您的第二个严重问题是您指定:
this->p::name[25]='g'; //here is the problem
这将'g'分配给数组名称的第26个元素。 (数组为0索引)
答案 2 :(得分:6)
不是吗
struct { ... } p; // variable of struct-type definition.
不是
struct p { ... }; // type 'struct p' definition.
答案 3 :(得分:4)
使用typedef将结构定义放在类之外。通过在.cpp文件中定义结构,它将不会在您的类之外显示。
#include <iostream>
typedef struct _foo
{
int a;
} foo;
class bar
{
public:
void setA(int newa);
int getA();
private:
foo myfoo;
};
void bar::setA(int newa)
{
myfoo.a = newa;
}
int bar::getA()
{
return myfoo.a;
}
using namespace std;
int main()
{
bar mybar;
mybar.setA(17);
cout << mybar.getA() << endl;
return 0;
}