我无法访问其中一个程序中的私有类变量。我做了这个测试程序,但仍然不明白我做错了什么。
test.h
class Test
{
private:
int Number;
public:
int Randomize();
};
TEST.CPP
#include "test.h"
#include <iostream>
int Test::Randomize()
{
Number == 1;
std::cout << Number;
return Number;
}
的main.cpp
#include "test.h"
#include <stdio.h>
int main(int argc, char* argv[])
{
Test test;
int result = test.Randomize();
printf ("Number = %d", result);
return 0;
}
编译时我收到此警告
test.cpp:6:9: warning: expression result unused [-Wunused-value]
Number == 1;
正在输出
134514363Number = 134514363
我不知道发生了什么事。认为我超出了它的范围。但我的意思是它仍然编译得很好,以为如果我做得不对,我根本无法访问Number。
任何帮助将不胜感激。 感谢
答案 0 :(得分:3)
==
是等于运算符,它检查两个操作数是否相等。 =
是赋值运算符,它将右操作数的计算值放在左操作数中。
它给你一个警告(不是编译器错误)来指示Number == 1;
不习惯做任何事情,这很可能是程序员的错误(例如,它询问你是否打算使用{ {1}}而不是?)
最后,你得到=
的原因是因为在C和C ++中,如果你没有将变量设置为任何东西,它有一个你无法预测的随机值,基于发生的事情。在那里记忆。基本上,C / C ++在声明变量时不会初始化变量。
通常,编译器警告值得一读 - 它们通常意味着程序中的错误。
答案 1 :(得分:3)
==
是比较运算符;如果操作数相等,则返回bool
true
。
=
是赋值运算符;它将右操作数分配给左侧操作数并返回第一个操作数(作为左值)。
因此,对于Number == 1
,您告诉编译器“检查Number
是否等于1(并丢弃此类比较的结果)”;请注意编译器正在警告你 - 他说你有一个没有副作用的表达式,结果被丢弃,这显然是一个无用的指令,因此“怀疑”(因此警告)。
您想要的是Number = 1
,即“将Number
设置为1”。
换句话说,这里的问题是你永远不会在你的代码中为Number
分配一个明确的值(因为你拼写错误=
),Number
仍然是“无限期” “value(在您的程序中,恰好是134514363,可能是由于CRT初始化例程中堆栈中剩余的垃圾)。
答案 2 :(得分:2)
此行正在使用equality
运算符,其结果将被丢弃,因此警告:
Number == 1;
应该使用=
运算符assignment
:
Number = 1;
答案 3 :(得分:1)
您在此处使用==
(比较)代替=
(作业):
int Test::Randomize()
{
Number == 1; // oops!
std::cout << Number;
return Number;
}
此处的比较不执行任何操作,因此在打印时会使用垃圾值。
答案 4 :(得分:1)
你没有对你的号码做任何事情,编译器甚至警告过你。此外,调试器是你的朋友。