【问题标题】:Implementation file unable to identify class name from C++ Header file [duplicate]实现文件无法从 C++ 头文件中识别类名 [重复]
【发布时间】:2016-12-23 09:20:46
【问题描述】:

我正在学习 C++。我正在练习将我的 C++ 类拆分为单独的文件——实现和头文件,即 Student_Impl.cppStudent_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 非常感谢。有效 :) 。我需要几天时间才能弄清楚这一点。感谢您的帮助。
  • 禁用项目的预编译头文件实际上可能是个好主意,因为这应该只是在大型项目中使用的优化,但由于某种原因已将其纳入项目模板。

标签: c++ visual-c++


【解决方案1】:

Marvin Sielenkemper 将正确答案放在评论中 - 标题 prior 到 "stdafx.h" 被忽略。这是预编译头文件如何在 Visual Studio 上工作的特定于实现的副作用。

另外,使用#include &lt;iostream&gt; 代替#include "iostream"&lt;header&gt; 表单用于标准标题,"header.h" 用于您自己的标题。

【讨论】:

    猜你喜欢
    • 2013-10-18
    • 2017-05-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-03
    • 1970-01-01
    • 2021-01-13
    相关资源
    最近更新 更多