C++ 的头文件和源文件组织

Posted

技术标签:

【中文标题】C++ 的头文件和源文件组织【英文标题】:Header and Source File Organization for C++ 【发布时间】:2014-09-09 06:13:39 【问题描述】:

我知道这似乎是一个常见问题。但是,我似乎遵循了头文件的所有标准做法和指南,除了我认为不会妨碍编译的包含守卫。仅当 CustomerInformation.h 包含在包含 main 方法的 CPlusPlusTraining.cpp 中时,才会出现所描述的链接器错误。

这是我用于 C++ 文件组织信息的一个来源:http://www.umich.edu/~eecs381/handouts/CppHeaderFileGuidelines.pdf

这是我的标题

class CustomerInformation 

public: CustomerInformation();

public: char InformationRequest();

;

来源

#include "stdafx.h"
#include <iostream>
#include <string>
#include "CustomerInformation.h"
using namespace std;

char InformationRequest() 
      string name;
      string lastName;
      int age;
      cout << "Please input your first and last name then your age: \n";
      cin >> name >> lastName >> age;
      cout << "Customer Information: " << name + " " << lastName + " " << age << "\n";

      char correction;
      cout << "Is all of this information correct? If it is Enter 'Y' if not Enter 'N' \n";
      cin >> correction;

      if (correction == 'N') 
        cout << "Please Enter your information again: \n";
        InformationRequest();
      

      return correction;
`

并且我包含在 CPlusPlusTraining.cpp 中

#include "stdafx.h"
#include <iostream>
#include <string>
#include "CustomerInformation.h"
using namespace std;

头文件和源文件同名。头文件以 .h 结尾,而源文件以 .cpp 结尾。但是,我在编译时遇到了许多链接器错误。这里有什么问题?我将在另一天保存重复的代码包含。谢谢。

我如何在包含 Main 的文件中调用方法

CustomerInformation CI = CustomerInformation::CustomerInformation();
//information request
CI.InformationRequest(); //Not type safe for input

错误详情:

构建开始:项目:CPlusPlusTraining,配置:调试 Win32 ------ 1> CPlusPlusTraining.cpp //带有Main的文件 1>CPlusPlusTraining.obj : 错误 LNK2019: 函数 _wmain 中引用的无法解析的外部符号“public: __thiscall CustomerInformation::CustomerInformation(void)” (??0CustomerInformation@@QAE@XZ) 1>CPlusPlusTraining.obj : 错误 LNK2019: 函数 _wmain 中引用的未解析外部符号“public: char __thiscall CustomerInformation::InformationRequest(void)” (?InformationRequest@CustomerInformation@@QAEDXZ) 1>C:\Users\Gordlo_2\documents\visual studio 2013\Projects\CPlusPlusTraining\Debug\CPlusPlusTraining.exe : 致命错误 LNK1120: 2 unresolved externals ========== 构建:0 成功,1 失败,0 最新,0 跳过 ==========

【问题讨论】:

PS 这不是家庭作业,我只是通过 Bjarne Stroustrup 的一本书来了解 C++ 的基础知识。 什么是链接器错误?您是否使用 cpp 文件进行构建,即:g++ main.cpp InfoRequest.cpp 查看我的编辑以获取有关调用和错误的详细信息。 这里有一些答案:***.com/questions/9928238/… 看来您的链接阶段没有包括cpp 【参考方案1】:

您在没有类声明的情况下声明了 Customer 类的成员函数,导致编译器不知道这是您原型化的函数。 应该是:

 char CustomerInformation::InformationRequest() 
 //your function stuff
 

【讨论】:

解决了一个错误!我仍然有两个错误提到未解决的外部问题。 未声明。定义。声明在类主体中,并且是正确的,afaict。 @gordlonious:另一个错误是因为您声明但未定义构造函数。如果您不需要做任何特殊的事情来初始化类,请删除声明,或者如果您这样做,请实现它。

以上是关于C++ 的头文件和源文件组织的主要内容,如果未能解决你的问题,请参考以下文章

C++ 中的头文件和命名空间

将 C++ 嵌套类分离到它们自己的头文件中

算法竞赛常用C++头文件

C++ 结构原型在单独的头文件中

我想问一下vs 2008中的头文件的问题啊

C++ 中的多个类定义错误,我的头文件有问题吗?