如何将我想要的字符串输入int main()?

时间:2015-03-26 21:21:25

标签: c++ string class

好吧我不知道怎么解释这个但是这里有。我希望将Dog和Cat类的名称(从返回名称)转换为int main,以便打印出fido.name和spot.name所在的位置。我该怎么做?

#include "stdafx.h"
#include <iostream>
#include <string>

using namespace std;

class Dog {

   private:
      // constructor
      Dog(string name) {

         this->name = name;
         name = "Fido";
         cout << "Dog's name is " << name << endl;
      }
   public:
      static string name;
      static string GetName();

};

string Dog::GetName(){
   return name;
}

class Cat {

   private :
      // constructor
      Cat(string name) {

         this->name = name;
         name = "Fido";
         cout << "Cat's name is " << name << endl;
      }
   public :
      static string name;
      static string GetName();
};

string Cat::GetName(){
   return name;
}

int main() {

   Dog fido("Fido"); //error here stating that Dog::Dog(std::string name)
   //declared at line 13 is inaccessible 
   Cat spot("Spot");

   cout << "From main, the Dog's name is " << fido.name << endl;
   cout << "From main, the Cat's name is " << spot.name << endl;

   cout << "Hit any key to continue" << endl;

   system("pause");

   return 0;
}

2 个答案:

答案 0 :(得分:1)

您必须将构造函数设为公共(使用标记&#39; public:&#39;),否则您将无法从类外部创建对象。

此外,删除所有&#39;静态&#39; keyworkds,因为如果你宣布它是静态的,那么你将无法拥有超过1种不同的&#34; Cats&#34;和#34;狗&#34;

我希望它有所帮助

答案 1 :(得分:-1)

使用GetName()功能。

cout << "From main, the Dog's name is " << fido.GetName() << endl;
cout << "From main, the Cat's name is " << spot.GetName() << endl;

您必须将构造函数移动到

类的public部分
Dog fido("Fido");
Cat spot("Spot");

工作。

当我进入你的课堂时,我意识到你有更多的错误。 name需要非static成员变量,GetName()需要非static成员函数 - 在这两个类中。

Dog需要像:

class Dog {

   public:

      Dog(string name) {

         this->name = name;
      }

      string GetName() const;

   private:

      static string name;

};

您必须对Cat进行类似的更改。