我得到了
error: could not convert 'p1' from 'Person (*)()' to 'Person'
每当我使用默认构造函数时(当我创建Person p1时),我知道它是因为我使用了char数组,但是我必须使用它,我不能使用字符串<\ n / p>
我还得到2个警告
warning: converting to non-pointer type 'char' from NULL [-Wconversion-null]|
在默认构造函数
中warning: deprecated conversion from string constant to 'char*' [-Wwrite-strings]|
当我创建Person p2
时所以这是我的代码
#include <iostream>
#include <string>
#include <stdlib.h>
#include <stdio.h>
using namespace std;
class Person{
private:
char* name;
char gender;
int age;
public:
Person();
Person(char*, char, int);
friend void printInfo(Person);
};
Person::Person()
:name(NULL), gender(NULL), age(0) // this results in the first warning
{
}
Person::Person(char* n, char g, int a)
:name(n), gender(g), age(a)
{
}
void printInfo(Person p){
cout << "Name: " << p.name << endl;
cout << "Age: " << p.age << endl;
cout << "Gender: " << p.gender << endl;
}
int main()
{
Person p1(); // this results in an error
printInfo(p1);
Person p2("Max", 'm', 18); // this results in the second warning
printInfo(p2);
return 0;
}
答案 0 :(得分:9)
您正在遇到most vexing parse。
Person p1();
声明一个名为p1
的函数,该函数返回Person
并且不带参数。如果您想默认构建一个名为Person
的{{1}}对象,只需说p1
答案 1 :(得分:2)
首先发出警告是因为您尝试将NULL分配给性别,这是一个字符。
第二个是因为你将const char指针指向对象中的非const char指针。使用char const *
(或const char*
)作为指针类型是摆脱此警告的方法之一。使用char * const无济于事,因为它基本上意味着指向可修改字符串的const指针(即你不能改变指针,但你可以改变字符串),当你给它一个字符串常量时不是这种情况。