【发布时间】: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 非常感谢。有效 :) 。我需要几天时间才能弄清楚这一点。感谢您的帮助。
-
禁用项目的预编译头文件实际上可能是个好主意,因为这应该只是在大型项目中使用的优化,但由于某种原因已将其纳入项目模板。
标签: c++ visual-c++