全局函数头和实现
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&
作为拆分参数声明。
还有拆分声明与拆分定义不匹配 string const
与 string const&
【讨论】:
以上是关于全局函数头和实现的主要内容,如果未能解决你的问题,请参考以下文章
Android 逆向函数拦截原理 ( 通过修改 GOT 全局偏移表拦截函数 | 通过在实际被调用的函数中添加跳转代码实现函数拦截 )