您的位置:首页 > 编程语言 > C语言/C++

C++使用static的错误:无法解析的外部符号、“static”不应在文件范围内定义的成员函数上使用

2016-09-23 09:45 1106 查看
/ static_test.h : 头文件

002 #pragma once

003

004 class static_test

005 {

006 public:

007     static_test();//默认构造函数

008     void set(int x, int y, int z);//成员变量初始化

009     int add();//

010     static int add2();//静态成员函数

011     ~static_test();

012     static int sum;//公有的静态成员变量

013 private:

014     static int sum2;//私有的静态成员变量

015     int a, b, c;

016 };

017

018

019 // static_test.cpp : 定义控制台应用程序的入口点。

020 //

021

022 #include "stdafx.h"

023 #include "static_test.h"

024 #include <iostream>

025 using namespace std;

026

027 /*

028 notice:

029    如果sum,sum2这两个静态成员变量没有在这里定义,就会出现错误:

030    static_test.obj : error LNK2001: 无法解析的外部符号 "private: static int static_test::sum2"

031    static_test.obj : error LNK2001: 无法解析的外部符号 "public: static int static_test::sum"

032 */

033 int static_test::sum = 0; //

034 int static_test::sum2 = 0; //

035

036 /*

037   全局函数可以调用类的public型的静态成员变量sum,可以改变它的值。

038   但不能用sum2,因为sum2是private类型的。

039 */

040 int fun_add(int x, int y, int z)

041 {

042     static_test::sum += x+y+z;

043     return static_test::sum;

044 }

045

046 /*

047 成员变量的初始化

048 */

049 static_test::static_test()

050 {

051     this->a = 0;

052     this->b = 0;

053     this->c = 0;

054 }

055

056 /*

057 给成员变量赋值

058 */

059 void static_test::set(int x, int y, int z)

060 {

061     a = x;

062     b = y;

063     c = z;

064 }

065

066 /*

067 析构函数

068 */

069 static_test::~static_test(void)

070 {

071 }

072

073 /*

074 成员函数的实现

075 */

076 int static_test::add()

077 {

078     return a+b+c;

079 }

080

081 /*

082 静态成员函数的实现

083 注意:静态成员函数只能访问类的静态成员变量。

084 定义时,前面不能加static,否则出现error C2724: “static_test::add2”: “static”不应在文件范围内定义的成员函数上使用错误:

085 */

086 int static_test::add2()

087 {

088     return sum2;

089 }

090

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

092 {

093     int result = 0;  //保存结果

094     static_test test;//创建一个对象

095     test.set(1, 2, 3);

096     result = test.add();

097     cout<<result<<endl;//result = 6

098     result = fun_add(4, 5, 6);

099     cout<<result<<endl;//result = 15

100     result = fun_add(1, 2, 3);

101     cout<<result<<endl;//result = 21    因为sum为静态成员变量,该变量的值可以保存给下一次调用,而不会冲掉,直到程序结束为止。

102     return 0;

103 }
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  class