C++ 无法在FunctionOne或FunctionTwo中调用GetColor或SetColor方法

C++ 无法在FunctionOne或FunctionTwo中调用GetColor或SetColor方法,c++,class,oop,C++,Class,Oop,我在学习C++的同时,从一本书中复制了这个简单的代码来玩它。但是,我不能在FunctionOne或FunctionTwo中调用GetColor或SetColor方法。我试过写theCat->GetColor,theCat->SetColor(“黄色”)在两个函数中,但它们似乎都不起作用。我想知道是否可以在函数中调用这些方法。如果是,怎么做 #include <iostream> #include <string> using namespace std; class Si

我在学习C++的同时,从一本书中复制了这个简单的代码来玩它。但是,我不能在
FunctionOne
FunctionTwo
中调用
GetColor
SetColor
方法。我试过写
theCat->GetColor
theCat->SetColor(“黄色”)在两个函数中,但它们似乎都不起作用。我想知道是否可以在函数中调用这些方法。如果是,怎么做

#include <iostream>
#include <string>
using namespace std;
class SimpleCat {
public:
    SimpleCat();
    SimpleCat(SimpleCat&);
    ~SimpleCat();
    void SetColor(string newColor) { color = newColor; }
    string GetColor() { return color; }
private:
    string color;
};

SimpleCat::SimpleCat() {
    cout << "Simple cat constructor…\n";
color:"";
}

SimpleCat::SimpleCat(SimpleCat&) {
    cout << "SimpleCat copy constructor…\n";
}

SimpleCat::~SimpleCat() {
    cout << "SimpleCat destructor…\n";
}

SimpleCat FunctionOne(SimpleCat theCat);
SimpleCat* FunctionTwo(SimpleCat* theCat);

int main() {
    cout << "Making a cat…\n";
    SimpleCat Frisky;
    cout << "Calling FunctionOne…\n";
    FunctionOne(Frisky);
    cout << "Calling FunctionTwo…\n";
    Frisky.SetColor("yellow");
    FunctionTwo(&Frisky);
    cout << Frisky.GetColor();
    return 0;

}

// function one passes by value
SimpleCat FunctionOne(SimpleCat theCat) {
    cout << "Function One, Returning…\n";
    return theCat;
}

SimpleCat* FunctionTwo(SimpleCat* theCat) {
    cout << "Function Two, Returning...\n";
    return theCat;
}
#包括
#包括
使用名称空间std;
类SimpleCat{
公众:
SimpleCat();
SimpleCat(SimpleCat&);
~SimpleCat();
void SetColor(字符串newColor){color=newColor;}
字符串GetColor(){return color;}
私人:
字符串颜色;
};
SimpleCat::SimpleCat(){
cout在
FunctionOne()
内部,
通过值传入CAT
。您必须使用
运算符访问其成员:

SimpleCat函数一(SimpleCat theCat){
涂层设置颜色(“红色”);

cout是的,可以在函数内部调用这些方法。例如:

#包括
#包括
使用名称空间std;
类SimpleCat{
公众:
SimpleCat();
SimpleCat(SimpleCat&);
~SimpleCat();
void SetColor(字符串newColor){color=newColor;}
字符串GetColor(){return color;}
私人:
字符串颜色;
};
SimpleCat::SimpleCat(){

该死的,比我快。太好了。谢谢。我还有一个问题。为什么我们不能将
FunctionTwo
声明为
SimpleCat FunctionTwo(SimpleCat*theCat);
?为什么它应该写成
SimpleCat*FunctionTwo(SimpleCat*theCat)
?@egoobidian什么使你认为你不能那样声明它?你可以。但是,返回值然后由值返回,所以如果你要返回
的cat
,那么你必须取消对它的引用,例如:
返回*theCat;
否则你必须返回一个全新的
SimpleCat
对象。@RemyLebeau噢我明白了。编译器给出了一个错误,这让我很困惑。@eGobidian嗯,是的,因为您不能将
SimpleCat*
指针分配给
SimpleCat
对象。但是您可以取消对指针的引用以访问它所指向的对象,然后您可以将该对象分配给另一个对象。
SimpleCat::SimpleCat(const SimpleCat &src) {
    cout << "SimpleCat copy constructor…\n";
    color = src.color;
}
SimpleCat::SimpleCat(const SimpleCat &src) : color(src.color) {
    cout << "SimpleCat copy constructor…\n";
}