求教:如何在其他cpp文件当中,调用静态全局函数?

时间:2022-09-30 16:35:54
刚从C#转入C++,萌新一枚。我自己写了一个弹窗提示的函数,想像C#一样作为静态全局函数,不用实例化,直接在其他cpp文件里面调用。VS2013编译没有错误,链接的时候显示“"error LNK2019: 无法解析的外部符号 该符号在函数 中被引用" 错误。。我查了其他贴子,说是不能像C#那么用,因为静态函数的作用范围只能在自己的cpp文件内。但是我就是想实现这个功能,请问大神们如何做呢?非常感谢!

5 个解决方案

#1


显示“"error LNK2019: 无法解析的外部符号 该符号在函数 中被引用" 错误。

#2


静态全局函数仅在本CPP中有效,去掉static修饰,此外,把函数声明写到头文件里,要使用该函数的CPP包含此头文件

#3


引用 2 楼 paschen 的回复:
静态全局函数仅在本CPP中有效,去掉static修饰,此外,把函数声明写到头文件里,要使用该函数的CPP包含此头文件


我是自己写了一个类似于MessageBox的窗体,负责消息提示。就是不想每次调用之前都实例化一次。函数声明是写在.h里面的,用到这个消息提示功能的文件,也加过头文件了,这个没问题。因为我还有其他的小的函数也要这么实现,例如矩阵的计算,转换等等。次次都实例化太麻烦了。。。。

我中午又查阅了其他资料,有一种说法是:用全局函数包装静态方法。请问这个是怎么实现的呢?版主方便写几行代码示意一下吗?我不太懂。谢谢版主!

#4


没学过面向过程的语言吗?
C#跟Java类似都是什么都写在类里面。
C/C++里的函数是可以独立于类存在的,就是所谓的全局函数,而static会限制其只能在本源文件里使用,不要static就行了,在另一个源文件里使用时要先声明该函数。

//A.cpp

void fun(){
//实现
}


//A.h

void fun();  //声明


//B.cpp

#include "A.h"  //引用函数声明

fun(); //调用

#5


引用 3楼我是你的主体 的回复:
Quote: 引用 2 楼 paschen 的回复:

静态全局函数仅在本CPP中有效,去掉static修饰,此外,把函数声明写到头文件里,要使用该函数的CPP包含此头文件


我是自己写了一个类似于MessageBox的窗体,负责消息提示。就是不想每次调用之前都实例化一次。函数声明是写在.h里面的,用到这个消息提示功能的文件,也加过头文件了,这个没问题。因为我还有其他的小的函数也要这么实现,例如矩阵的计算,转换等等。次次都实例化太麻烦了。。。。

我中午又查阅了其他资料,有一种说法是:用全局函数包装静态方法。请问这个是怎么实现的呢?版主方便写几行代码示意一下吗?我不太懂。谢谢版主!
c++和c#还是挺大差别的,函数不是对象,不存在实例化的,所以我没看懂你要哪种

#1


显示“"error LNK2019: 无法解析的外部符号 该符号在函数 中被引用" 错误。

#2


静态全局函数仅在本CPP中有效,去掉static修饰,此外,把函数声明写到头文件里,要使用该函数的CPP包含此头文件

#3


引用 2 楼 paschen 的回复:
静态全局函数仅在本CPP中有效,去掉static修饰,此外,把函数声明写到头文件里,要使用该函数的CPP包含此头文件


我是自己写了一个类似于MessageBox的窗体,负责消息提示。就是不想每次调用之前都实例化一次。函数声明是写在.h里面的,用到这个消息提示功能的文件,也加过头文件了,这个没问题。因为我还有其他的小的函数也要这么实现,例如矩阵的计算,转换等等。次次都实例化太麻烦了。。。。

我中午又查阅了其他资料,有一种说法是:用全局函数包装静态方法。请问这个是怎么实现的呢?版主方便写几行代码示意一下吗?我不太懂。谢谢版主!

#4


没学过面向过程的语言吗?
C#跟Java类似都是什么都写在类里面。
C/C++里的函数是可以独立于类存在的,就是所谓的全局函数,而static会限制其只能在本源文件里使用,不要static就行了,在另一个源文件里使用时要先声明该函数。

//A.cpp

void fun(){
//实现
}


//A.h

void fun();  //声明


//B.cpp

#include "A.h"  //引用函数声明

fun(); //调用

#5


引用 3楼我是你的主体 的回复:
Quote: 引用 2 楼 paschen 的回复:

静态全局函数仅在本CPP中有效,去掉static修饰,此外,把函数声明写到头文件里,要使用该函数的CPP包含此头文件


我是自己写了一个类似于MessageBox的窗体,负责消息提示。就是不想每次调用之前都实例化一次。函数声明是写在.h里面的,用到这个消息提示功能的文件,也加过头文件了,这个没问题。因为我还有其他的小的函数也要这么实现,例如矩阵的计算,转换等等。次次都实例化太麻烦了。。。。

我中午又查阅了其他资料,有一种说法是:用全局函数包装静态方法。请问这个是怎么实现的呢?版主方便写几行代码示意一下吗?我不太懂。谢谢版主!
c++和c#还是挺大差别的,函数不是对象,不存在实例化的,所以我没看懂你要哪种