全局函数头和实现

Posted

技术标签:

【中文标题】全局函数头和实现【英文标题】:Global function header and implementation 【发布时间】:2010-03-02 22:35:31 【问题描述】:

如何划分全局函数的头部和实现?

我的方法是:

拆分.h

#pragma once

#include <string>
#include <vector>
#include <functional>
#include <iostream>

void split(const string s, const string c);

split.cpp

#include "split.h"

void split(const string& s, const string& c)
...
 

main.cpp

// main.cpp : Defines the entry point for the console application.
//
#include <string>
#include <vector>
#include <functional>
#include <iostream>

#include "stdafx.h"

#include "split.h"

using namespace std;

int _tmain(int argc, _TCHAR* argv[])

    vector<string> v;
    string s = "The;;woraaald;;is;;not;;enoaaaugh";
    string c = " aaa ;; ccc";
    split(s,c);

    return 0;

错误是:

错误 1 ​​错误 C4430:缺少类型说明符 - 假定为 int。注意:C++ 不支持 default-int ...\split.h 8

错误 2 错误 C2146:语法错误:在标识符 's' 之前缺少 ',' ...\split.h 8

我该如何解决这个问题?谢谢

【问题讨论】:

标准库中的类位于std:: 命名空间中。不要在头文件中使用using namespace,完全限定名称。为了保持一致性,也许你也可以尝试摆脱源文件中的这种习惯。 第二个错误是由string引起的,需要std::string(除非你指定using std::string;)。 【参考方案1】:

在头文件中使用 std:: 命名空间限定符 - std::string

【讨论】:

【参考方案2】:

在头文件中,您必须提供完全限定名称std::string。在源文件中,您可以添加using namespace std;using std::string;,然后拼写为string

此外,您已经声明了按值接受参数的函数,但定义了它通过引用接受参数。

【讨论】:

【参考方案3】:

至少一个问题是,您在 split.h 中缺少 'std::' 命名空间限定符:

#pragma once

#include <string>
#include <vector>
#include <functional>
#include <iostream>

void split(const std::string s, const std::string c);

【讨论】:

【参考方案4】:

我认为您要么忘记在拆分声明之前放置using std::string;,要么使用std::string const&amp; 作为拆分参数声明。

还有拆分声明与拆分定义不匹配 string conststring const&amp;

【讨论】:

以上是关于全局函数头和实现的主要内容,如果未能解决你的问题,请参考以下文章

react函数组件中如何实现全局变量

一个函数如何实现return好几个返回值

Android 逆向函数拦截原理 ( 通过修改 GOT 全局偏移表拦截函数 | 通过在实际被调用的函数中添加跳转代码实现函数拦截 )

C++ 实现不使用全局声明的函数

python3--函数(函数,全局变量和局部变量,递归函数)

微信小程序 如何定义全局函数?