类中未声明的字符串标识符

时间:2019-01-02 06:33:07

标签: c++ class

我正在学习c ++继承,这里有一个问题。 如果我将这个简单的代码全部放在main.cpp文件中,它将可以正常工作 问题。

但是当我分离头文件中的文件时,否则 它不起作用,并且给我一些错误。

这是名为book.h的头文件的代码

 #ifndef BOOK_H
 #define BOOK_H

 class book
{
 private:
 string name;

 public:
 book(string n = "default") : name(n) {};
 ~book() {};
 void printname();
};

#endif

这是book.cpp的代码,我定义了此类的功能 在此文件中。

#include <iostream>
#include <Windows.h>
#include <string>
#include "book.h"

using namespace std;

void book::printname()
{
 cout << name << endl;
 return;
}

最后是main.cpp文件:

#include <iostream>
#include <Windows.h> 
#include <string>
#include "book.h"

using namespace std;

 int main()
{
 system("color 0A");
 book programing("c++");
 cout << "the name of the book is ";
 programing.printname();

 system("pause");
 return;
}

和我得到的错误:

  

严重性代码说明项目文件行抑制状态

     

错误C2065'名称':未声明的标识符簿d:\ vs   程序\ book \ book \ book.cpp 10

     

错误C3646'名称':未知的替代说明书d:\ vs   程序\ book \ book \ book.h 7

     

错误C4430缺少类型说明符-假定为int。注意:C ++不会   支持default-int book d:\ vs program \ book \ book \ book.h 7

     

错误C2061语法错误:标识符'string'书d:\ vs   程序\ book \ book \ book.h 10

     

错误C2065'n':未声明的标识符簿d:\ vs   程序\ book \ book \ book.h 10

     

错误C2614'book':成员初始化非法:'name'不是   基本书或会员书d:\ vs program \ book \ book \ book.h 10

     

错误C3646'名称':未知的替代说明书d:\ vs   程序\ book \ book \ book.h 7

     

错误C4430缺少类型说明符-假定为int。注意:C ++不会   支持default-int book d:\ vs程序\ book \ book \ book.h 7
  错误C2061语法错误:标识符'string'书d:\ vs   程序\ book \ book \ book.h 10

     

错误C2065'n':未声明的标识符簿d:\ vs   程序\ book \ book \ book.h 10

     

错误C2614'book':成员初始化非法:'name'不是   基本书或会员书d:\ vs program \ book \ book \ book.h 10

和其他错误...

2 个答案:

答案 0 :(得分:5)

您需要确保{h}文件中的string是有效类型。

  1. 添加#include <string>
  2. 使用std::string而不是string

#ifndef BOOK_H
#define BOOK_H

#include <string>

class book
{
   private:
      std::string name;

   public:
      book(std::string n = "default") : name(n) {};
      ~book() {};
      void printname();
};

#endif

答案 1 :(得分:0)

This answer似乎可以解决您的问题。 附带说明,自C ++ 11起,您还可以为类成员指定默认值。因此,您可以这样做:

#ifndef BOOK_H
#define BOOK_H

#include <string>

class book
{
   private:
      std::string name = "default";

   public:
      book() = default;
      book(std::string n) : name(n) {};
      ~book() {};
      void printname();
};

#endif