static成员"Cannot declare member function ...to have static linkage"错误
2016-05-08 09:59
645 查看
(一)问题描述
.h文件中声明类中静态成员函数,在.cpp文件中定义,编译出现"Cannot declare member function ...to have static linkage"错误。
(二)环境:
ubuntu 14.04
g++ 4.8.4
代码如下:
test.h
#ifndef __TEST_H__
#define __TEST_H__
class test
{
public:
test(){}
~test(){}
static void func();
};
#endif
test.cpp
在终端执行
g++ -c test.cpp
出现错误:
"Cannot declare member function ...to have static linkage"
(三)解决方案
在.cpp文件中去掉static关键字
原因参考:http://blog.csdn.net/guoxiaojie_415/article/details/5364354
简单翻译一下是因为,static的用法有好几种,在类中成员函数的声明使用static关键字则是规定说该成员函数为该类所有实例所共享也就是所谓的"one-per-class",而在.cpp文件中使用static关键字的作用也是说该函数或变量仅仅只有该文件可以访问,这就与第一个用法冲突了。不过在这种情况时,定义static的类成员变量不需要再使用static关键字了,或者直接在.h文件中声明+定义
.h文件中声明类中静态成员函数,在.cpp文件中定义,编译出现"Cannot declare member function ...to have static linkage"错误。
(二)环境:
ubuntu 14.04
g++ 4.8.4
代码如下:
test.h
#ifndef __TEST_H__
#define __TEST_H__
class test
{
public:
test(){}
~test(){}
static void func();
};
#endif
test.cpp
#include "test.h" #include <iostream> static void test::func() { std::cout<<"func"<<std::endl; }
在终端执行
g++ -c test.cpp
出现错误:
"Cannot declare member function ...to have static linkage"
(三)解决方案
在.cpp文件中去掉static关键字
原因参考:http://blog.csdn.net/guoxiaojie_415/article/details/5364354
简单翻译一下是因为,static的用法有好几种,在类中成员函数的声明使用static关键字则是规定说该成员函数为该类所有实例所共享也就是所谓的"one-per-class",而在.cpp文件中使用static关键字的作用也是说该函数或变量仅仅只有该文件可以访问,这就与第一个用法冲突了。不过在这种情况时,定义static的类成员变量不需要再使用static关键字了,或者直接在.h文件中声明+定义
相关文章推荐
- SpringMVC——接收请求参数和页面传参
- linuxi下的做图工具——gnuplot安装
- 可扩展的时间序列xts
- xz压缩解压工具的安装
- spring mvc的获取参数和传递参数
- 链表逆序 和 寻找链表中间节点
- vtk实战(五十四)—对直线设置颜色
- GreenDao 使用教程 二
- Winner
- eclipse上hadoop源码阅读
- (1) Centos 7 install VirtualBox guest additions
- ubuntu14下python导入第三方so文件的路径问题
- Nginx 虚拟主机 VirtualHost 配置
- Android中使用ViewPager实现图片的切换
- Geek-Band--第十周分享
- 当使用使用SpringBoot时,要继承SpringBoot的POM的原因
- C++实验5-数组的分离
- 集合概述
- win32汇编 invoke 和 call区别
- springcloud(第五篇)springcloud turbine