实现文件无法从 C++ 头文件中识别类名 [重复]
Posted
技术标签:
【中文标题】实现文件无法从 C++ 头文件中识别类名 [重复]【英文标题】:Implementation file unable to identify class name from C++ Header file [duplicate] 【发布时间】:2016-12-23 09:20:46 【问题描述】:我正在学习 C++。我正在练习将我的 C++ 类拆分为单独的文件——实现和头文件,即 Student_Impl.cpp 和 Student_Header.h。然后有一个驱动文件 Student_register.cpp 将创建 3 个学生对象。但是,当我尝试构建它时,它会抛出错误,说明 Student 不是命名空间或类。我在我的实现文件 Student_Impl.cpp 和驱动程序文件 Student_register.cpp 中包含了 Student_Header.h(存在 Student 类声明),但它仍然抛出相同的错误。可能的原因是什么?我正在使用 Visual Studio 2015。
Student_Header.h
#pragma once
#include <string>
using namespace std;
class Student
private:
string fname;
string lname;
string address;
string city;
string phone;
int age;
public:
Student();
Student(string, string, string, string, string, int);
~Student();
string get_fname();
string get_lname();
string get_address();
string get_city();
string get_phone();
int get_age();
;
Student_Impl.cpp
#include "Student_Header.h"
#include "iostream"
#include "stdafx.h"
#include <string>
using namespace std;
Student::Student()
Student::Student(string fname1, string lname1, string address1, string city1, string phone1, int age1)
fname = fname1;
lname = lname1;
address = address1;
city = city1;
phone = phone1;
age = age1;
string Student::get_fname()
return fname;
string Student::get_lname()
return lname;
string Student::get_address()
return address;
string Student::get_city()
return city;
string Student::get_phone()
return phone;
int Student::get_age()
return age;
Student::~Student()
Student_register.cpp
#include "stdafx.h"
#include "Student_Header.h"
#include <string>
#include "iostream"
using namespace std;
int main()
Student Student1("Mike", "J", "MikeAdd", "MikeCity", "MikePhone", 26);
Student Student2("Jack", "R", "JackAdd", "JackCity", "JackPhone", 25);
Student Student3("Roney", "M", "RoneyAdd", "RoneyCity", "RoneyPhone", 27);
// code for data retrieval
return 0;
【问题讨论】:
是否包含正确的头文件?如果您在不同文件夹中有多个同名文件,编译器可能会选择错误的文件。要找出实际使用的文件,您可以为其中一个实现文件启用“显示包含”选项。此选项曾经位于文件属性 IIRC 的“C++”-“高级”部分中。 @MarvinSielenkemper 是的,Student_Header.h 是正确的头文件。这是唯一具有该名称的文件。 您应该在“Student_Impl.cpp”中包含本地头文件在“stdafx.h”之后。该文件是 VS 的预编译头机制的一部分,需要格外小心。 @MarvinSielenkemper 非常感谢。有效 :) 。我需要几天时间才能弄清楚这一点。感谢您的帮助。 禁用项目的预编译头文件实际上可能是个好主意,因为这应该只是在大型项目中使用的优化,但由于某种原因已将其纳入项目模板。 【参考方案1】:Marvin Sielenkemper 将正确答案放在评论中 - 标题 prior 到 "stdafx.h" 被忽略。这是预编译头文件如何在 Visual Studio 上工作的特定于实现的副作用。
另外,使用#include <iostream>
代替#include "iostream"
。 <header>
表单用于标准标题,"header.h"
用于您自己的标题。
【讨论】:
以上是关于实现文件无法从 C++ 头文件中识别类名 [重复]的主要内容,如果未能解决你的问题,请参考以下文章