pau*_*lAl 1 c++ oop static class object
我有三个文件,一个主.cpp文件:
#include <stdio.h>
#include "myClass.h"
int main()
{
myClass mvar;
tryVar = 23; // why does this not work?
printf("%d ", mvar.readTryVar()); // This writes out 0, why??
return 0;
}
Run Code Online (Sandbox Code Playgroud)
一个myClass.cpp文件
#include "myClass.h"
myClass::myClass(void)
{
}
myClass::~myClass(void)
{
}
void myClass::setTryVar()
{
tryVar = 23334;
}
int myClass::readTryVar()
{
return tryVar;
}
Run Code Online (Sandbox Code Playgroud)
和myClass.h文件
#pragma once
static int tryVar;
class myClass
{
public:
myClass(void);
~myClass(void);
void setTryVar();
int readTryVar();
};
Run Code Online (Sandbox Code Playgroud)
它们是非常简单的文件,但我无法理解为什么静态变量不在main函数中设置,我需要通过myClass函数设置它.
我认为我不太清楚如何创建"翻译单元",我知道"include"指令只是在实际编译之前将头文件的内容复制到.cpp文件中..那么为什么不是'静态变量可见吗?
static有多重含义.在a之外class,它声明了一个对每个翻译单元都是唯一的变量,因此main.cpp并myClass.cpp拥有自己的副本.
要完成你想要的,你需要一个extern变量:
//myClass.h
extern int tryVar;
//myClass.cpp
int tryVar = 0; //definition needed for extern variable
Run Code Online (Sandbox Code Playgroud)
从广义上讲,您可以将每个.cpp文件视为翻译单元.其他所有内容都包含在其中#include.因此,由于两者的.cpp文件包括myClass.h,他们都定义了一个名为静态变量tryVar.您有两个具有相同名称的变量,每个代码文件都会读取和写入自己的副本.他们看不到彼此的副本.
如果要从多个翻译单元(.cpp文件)访问变量,则它不应该是静态的.相反,它应该extern在标题中声明,然后在一个翻译单元中定义.查看过去的Stack Overflow问题C中的外部变量是什么?
更改标题以声明变量:
extern int tryVar;
Run Code Online (Sandbox Code Playgroud)
更改myClass.cpp以定义它:
int tryVar;
Run Code Online (Sandbox Code Playgroud)
通过这两项更改,您可以在整个程序中读取和写入相同的变量.
一般来说,如果你在标题中使用static全局(即非成员)函数或变量,那么你可能做错了.(但是在头文件中使用成员函数和变量很好.)仅在.cpp文件中使用global .staticstatic
| 归档时间: |
|
| 查看次数: |
232 次 |
| 最近记录: |