c++ - 访问在构造函数期间创建的值 - C++
问题描述
我今天有一个关于访问其值是在重载构造函数期间创建的变量的问题。我的函数返回一个变量,以 i (int) 或 ch (char) 开头。
我正在尝试使用像 std::cout << FCalc.GetUserNum1(); 这样的行 在另一个函数中以打印正确的值。正如我现在拥有的那样,我可以从我的主要功能中这样做,但我无法从其他功能中这样做。
void vCalcNum();
char chGetUserOperation();
int iGetUserNum1();
int iGetUserNum2();
void vTestFunction();
FCalc FCalculate;
int main()
{
vCalcNum();
//Overloaded constructor (Int, Int, Char) Each function returns variable
FCalc FCalc(iGetUserNum2(), iGetUserNum1(), chGetUserOperation());
std::cout << FCalc.GetUserNum1(); //cout prints proper value to console
sayUserOperation();
return 0;
}
void sayUserOperation()
{
std::cout << FCalc.GetUserOperation();
//This is where I am having trouble reffrencing GetUserOperation.
// Class and getters are located in another file - can update if code is
//needed I have tried variants such as FCalculate.GetUserOperation()
//which returns nothing
}
//Edit to add FCalc.h source code
class FCalc
{
public:
FCalc(); //constructor
FCalc(int, int, char); //overlaoded constructor
~FCalc(); //destructor
char GetUserOperation() const;
int GetUserNum1() const;
int GetUserNum2() const;
private:
int NewUserNum1;
int NewUserNum2;
char NewUserOperation;
};
//edited to add FCalc.cpp source code
#pragma once
#include "FCalc.h"
#include <iostream>
#include <iomanip>
#include <string>
char FCalc::GetUserOperation() const {return NewUserOperation;}
int FCalc::GetUserNum1() const { return NewUserNum1;}
int FCalc::GetUserNum2() const { return NewUserNum2;}
FCalc::FCalc()
{
int UserNum1 = 0;
int UserNum2 = 0;
char UserOperation;
}
FCalc::FCalc(int UserNum2, int UserNum1, char UserOperation)
{
NewUserNum1 = UserNum1;
NewUserNum2 = UserNum2;
NewUserOperation = UserOperation;
}
FCalc::~FCalc() {}
解决方案
您的代码定义了一个类FCalc
。它还定义了这个类的两个对象,FCalculate
(global) 和FCalc
(local in main
),混淆地命名为与类相同。
如果要访问函数中的变量,该变量必须是全局变量或作为函数参数传入。(这对于对象来说并没有什么特别之处。)
您main
没有将其局部FCalc
变量传递给sayUserOperation
,因此sayUserOperation
无法访问它。(它看到的是名为的类FCalc
,但这对您没有帮助。)
这是一种方法:
void sayUserOperation(const FCalc &x)
{
std::cout << x.GetUserOperation() << '\n';
}
int main()
{
vCalcNum();
FCalc calc(iGetUserNum2(), iGetUserNum1(), chGetUserOperation());
std::cout << calc.GetUserNum1() << '\n';
sayUserOperation(calc);
}
没有做任何有用的原因FCalculate.GetUserOperation()
是即使FCalculate
变量是可访问的,它的内容也没有被初始化。尤其是:
FCalc::FCalc()
{
int UserNum1 = 0;
int UserNum2 = 0;
char UserOperation;
}
您的默认构造函数声明了一些局部变量,但不对它们做任何事情。它也没有设置NewUserNum1
, NewUserNum2
, 或NewUserOperation
((奇怪的命名)成员变量)。
推荐阅读
- red - 如何在找到元素后增加块的元素?
- java - 游戏冻结并显示连续执行 6 个布局。跳过
- julia - 遍历 Julia 中的所有可能性
- react-native - 防止在 React-Native 中有 2 列的 FlatList 上的单个项目宽度为 100%
- javascript - React Router 结构化 - 传递函数
- mysql - 我可以授予用户仅使用他的数据更改表的权限吗?
- c++ - 在整个执行生命周期中如何查看服务的控制台窗口?
- azure - 如何在微服务/无服务器架构中创建文件缓存层
- excel - 使用 vba 清理具有多个分隔符的数据
- android - 尝试使用内置工具通过 android-studio 实现 firebase 时出错