问题与类或命名空间的名称

时间:2016-05-31 11:04:21

标签: c++ class namespaces

编译器说:学生不是类或命名空间的名称。它说“名字”是未宣布的。

students.cpp:

    #include "stdafx.h"
#include <string>
#include "students.h"
using namespace std;
    void students::set_name(string student_name)
    {
        name = student_name;
    }

students.h:

#pragma once
#include <string>
#include "students.cpp"
using namespace std;
class students
{   public:
            void set_name(string student_name); 
    private:
            string name;
};

的main.cpp

#include "stdafx.h"
#include <iostream>
#include <cstdlib>
#include <string>
#include "students.h"
#include "students.cpp"
using namespace std;  
    int main()
    {
        students *student = new students;
        std::string name;
        std::cout << "Name: ";
        getline(std::cin, name);
        student->set_name(name);
        delete student;
        system("pause");
        return 0;
    }

更新:在我删除了“#include”students.cpp“”后,我得到了:

 1>students.obj : error LNK2005: "public: void __thiscall students::set_name(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >)" (?set_name@students@@QAEXV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@Z) уже определен в main.obj

3 个答案:

答案 0 :(得分:3)

您不应该在students.h文件中包含.cpp文件,只需省略

#include "students.cpp"

补充提示:省略

using namespace std;
在头文件中

以避免命名空间冲突,请参阅此question here

答案 1 :(得分:0)

LNK2005表示已定义符号,您已添加:

#include "students.cpp"

在源文件的两个位置,因此您有students::set_name(string student_name)的多个定义。您永远不应在源文件中包含.cpp文件。在项目中添加students.cpp,然后删除源中#include "students.cpp"的所有内容。

答案 2 :(得分:0)

您应该从main.cpp和students.h中删除#include "students.cpp"