我使用C++的个人风格总是把类声明放在一个包含文件中,并在.cpp文件中定义,非常类似于Loki对C++头文件,代码分离的回答.不可否认,我喜欢这种风格的部分原因可能与我花费编码Modula-2和Ada的所有年份有关,两者都有与规范文件和正文文件类似的方案.
我有一个同事,比我更了解C++,他坚持认为所有的C++声明应尽可能在头文件中包含定义.他并不是说这是一种有效的替代风格,甚至是一种稍微好一点的风格,而是这是每个人现在都用于C++的新普遍接受的风格.
我不像以前那样柔软,所以我并不急于拼抢他的这个潮流,直到我看到更多的人和他在一起.那个成语真的有多常见?
只是给出答案的一些结构:它现在是The Way,非常常见,有点普遍,不常见,还是出错?
好吧,无论如何不是C/C++专家,但我认为头文件的目的是声明函数,然后C/CPP文件来定义实现.
但是,今晚回顾一些C++代码,我发现这是在类的头文件中...
public:
UInt32 GetNumberChannels() const { return _numberChannels; } // <-- Huh??
private:
UInt32 _numberChannels;
Run Code Online (Sandbox Code Playgroud)
那么为什么标题中有实现呢?是否与const关键字有关?这是内联类方法吗?与定义CPP文件中的实现相比,这样做的好处/意义究竟是什么?
我想使用 Wireshark 开源项目中“func.h”文件中的函数。我需要在多个 .cpp 文件中使用 funct() 函数,但出现多重定义错误。
函数.h:
#ifndef func_h
#define func_h
#include<string>
void *funct(char *cName)
{
std::string name = cName;
cName+= ".extension";
}
Run Code Online (Sandbox Code Playgroud)
在 .cpp 文件中,我包含 func.h:
#include "func.h"
Run Code Online (Sandbox Code Playgroud)
并从 2 个 .cpp 文件调用 funct() 函数:
funct("program");
Run Code Online (Sandbox Code Playgroud)
我应该怎么做才能避免出现多重定义错误?解决方法是将函数定义复制并粘贴到每个 .cpp 文件中并更改函数名称,但这很丑陋。
非常感谢。