c++中的错误

Error in C++

本文关键字:错误 c++      更新时间:2023-10-16

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

#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;
}

当我编译这段代码时,我得到了很多消息,例如:

error: no matching function for call  to 'Animal::Animal(const char[5], int)'
note: Animal::Animal(char, int) <near match>
note: candidate expects 1 argument, 2 provided

谢谢!

你不需要这样做->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;

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