首页 > 解决方案 > 访问在构造函数期间创建的值 - 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() {}

标签: c++functionconstructor

解决方案


您的代码定义了一个类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((奇怪的命名)成员变量)。


推荐阅读