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

Posted

技术标签:

【中文标题】类中未声明的字符串标识符【英文标题】:string undeclared identifier in class 【发布时间】:2019-01-02 06:33:07 【问题描述】:

我正在学习 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 'name': 未声明的标识符 book d:\vs 程序\书籍\书籍\书籍.cpp 10

错误 C3646 'name': 未知的覆盖说明符 book d:\vs 程序\书籍\书籍\书籍.h 7

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

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

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

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

错误 C3646 'name': 未知的覆盖说明符 book d:\vs 程序\书籍\书籍\书籍.h 7

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

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

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

还有其他错误...

【问题讨论】:

【参考方案1】:

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

    添加#include &lt;string&gt;。 使用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

【讨论】:

【参考方案2】:

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

【讨论】:

在此代码中,将永远不会使用默认值,因为您没有默认构造函数(并且提供的构造函数会替换它) 我喜欢这个补充,但是你没有解释实际问题在哪里 需要添加默认构造函数:book() = default;

以上是关于类中未声明的字符串标识符的主要内容,如果未能解决你的问题,请参考以下文章

在类中使用未声明的标识符

托管代码中未声明的标识符错误...Visual C#

RestKit - RKObjectManager 中未声明的标识符“DISPATCH_QUEUE_SERIAL”?

C++点滴----关于类常成员函数

C 2065 AFX_IDW_MENUBAR未声明的标识符 错误提示

php--在类中声明常量的关键字