static成员"Cannot declare member function ...to have static linkage"错误

╰+哭是因爲堅強的太久メ 2022-08-22 00:10 231阅读 0赞

(一)问题描述

.h文件中声明类中静态成员函数,在.cpp文件中定义,编译出现”Cannot declare member function …to have static linkage”错误。

(二)环境:

ubuntu 14.04

g++ 4.8.4

代码如下:

test.h

  1. #ifndef __TEST_H__
  2. #define __TEST_H__
  3. class test
  4. {
  5. public:
  6. test(){}
  7. ~test(){}
  8. static void func();
  9. };
  10. #endif

test.cpp

  1. #include "test.h"
  2. #include <iostream>
  3. static void test::func()
  4. {
  5. std::cout<<"func"<<std::endl;
  6. }

在终端执行

  1. 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文件中声明+定义

发表评论

表情:
评论列表 (有 0 条评论,231人围观)

还没有评论,来说两句吧...

相关阅读

    相关 【JAVASE】static成员

    前言假设三个同学是同一个班的,那么他们上课肯定是在同一个教室,那既然在同一个教室,那能否给类中再加一个成员变量,来保存同学上课时的教室呢?答案是不行的。之前在Studen...

    相关 C++--static成员

    0.static修饰类中成员,表示类的共享数据 1.static类成员 在C++primer里面说过,static类成员不像普通的类数据成员,static类数据成员独立于一