gpt4 book ai didi

C++ "Variable not declared in this scope"- 再次

转载 作者:太空狗 更新时间:2023-10-29 23:27:04 25 4
gpt4 key购买 nike

我想这是一个非常简单的问题,而且可能已被多次回答。但是,我真的很不擅长 C++,并且一直在寻找解决方案,但无济于事。非常感谢您的帮助。

基本上:

#ifndef ANIMAL_H
#define ANIMAL_H

class Animal
{
public:
void execute();
void setName(char*);
Animal();
virtual ~Animal();

private:
void eat();
virtual void sleep() = 0;

protected:
char* name;
};

class Lion: public Animal
{
public:
Lion();

private:
virtual void sleep();
};



class Pig: public Animal
{
public:
Pig();

private:
virtual void sleep();
};



class Cow: public Animal
{
public:
Cow();

private:

virtual void sleep();
};

#endif

是头文件,其中:

#include <iostream>
#include "Animal.h"

using namespace std;

Animal::Animal()
{
name = new char[20];
}
Animal::~Animal()
{
delete [] name;
}

void setName( char* _name )
{
name = _name;
}

void Animal::eat()
{
cout << name << ": eats food" << endl;
}
void Animal::execute()
{
eat();
sleep();
}


Lion::Lion()
{
name = new char[20];
}
void Lion::sleep()
{
cout << "Lion: sleeps tonight" << endl;
}


Pig::Pig()
{
name = new char[20];
}
void Pig::sleep()
{
cout << "Pig: sleeps anytime, anywhere" << endl;
}


Cow::Cow()
{
name = new char[20];
}
void Cow::sleep()
{
cout << "Cow: sleeps when not eating" << endl;
}

是C文件。如您所见,非常简单的东西,但是,每当我尝试编译时,我都会收到:“错误:‘name’未在此范围内声明”。

如果我注释掉 setName 方法,它就会编译。我尝试将“名称”设置为公开,但仍然出现相同的错误。我也尝试过在 setName() 中使用“this->name = _name”,这会导致“在非成员函数中无效使用‘this’”。

我不知道还要搜索什么。提前致谢。

最佳答案

void setName( char* _name )
{
name = _name;
}

应该是

void Animal::setName( char* _name )
{
this->name = _name;
}

如果您使用this 参数,您需要有Animal::。如果没有 Animal::,它会认为您只是在创建一个名为 setName

的新全局函数

关于C++ "Variable not declared in this scope"- 再次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3495449/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com