构造函数中的错误 - C ++

时间:2015-07-18 01:03:21

标签: c++ constructor

我刚刚在Python中学习了一些面向对象的编程概念,但我想将这些知识转移到C ++,而我在使用Python时基本实现方面遇到了麻烦。

a()

编译此代码时,我收到了很多消息,例如:

#include<iostream>
using namespace std;

class Animal{

    char name;
    int age;

    public:
    Animal(char name, int age);
};

Animal::Animal(char name, int age) {
    this->name = name;
    this->age = age;
}

int main()
{
    Animal dog ("Megg", 10);

    cout << "Name: " dog.name <<endl;

    return 0;
}

谢谢!

1 个答案:

答案 0 :(得分:3)

您不需要在构造函数定义

中执行此操作 - &gt; name = name

“Megg”是一个字符串文字。您可以将“Megg”转换为const char *但不能转换为char(这很可能会导致您的错误)。

或更好。您可以使用C ++标准库字符串类std :: string

#include <iostream>
#include <string>

class Animal{

    std::string name;
    int age;

    public:
    Animal(std::string name, int age);
    std::string getName() const;
    int getAge() const;
};

Animal::Animal(std::string Name, int Age) {
    name = Name;
    age = Age;
}

std::string Animal::getName() const {
  return name;
}

int Animal::getAge() const {
   return age;
}

int main()
{
    Animal dog ("Megg", 10);

    std::cout << "Name: " << dog.getName() << std::endl; // Error in this line. Missing << between "Name: " and dog.name

    return 0;
}

一些额外的修改:

您应该避免使用using namespace std,因为它会占用标准库中的所有内容(来自您包含的文件),并将其放在全局命名空间中。您可以改为使用范围解析运算符::,如上所示。

当您开始使用多个库时,您可能会遇到两个类都有一个名为vector或string的类,或者具有相同名称的函数。避免这种情况的方法是指定要使用的命名空间。

或者替代地,您可以执行以下操作:

using std::cout;
using std::endl;
using std::string;

另外,为了使程序正常工作,您需要一种方法来访问对象的成员变量。您可以通过将变量设为公共或更好的做法来添加访问器函数来实现此目的。