Я новичок в C++. Я создал класс с именем Cache и создал объект L1Cache с помощью конструктора. Я передаю параметры конструктору и правильно распечатываю вычисленные данные. Но когда я вызываю другую функцию внутри одного и того же класса и того же объекта, данные, которые я сгенерировал в конструкторе, дают значение мусора. Здесь я хотел бы упомянуть, что все мои функции и переменные являются общедоступными.Функция класса дает значение для мусора
Мой код выглядит примерно так:
main.cc:
#include <stdio.h>
#include <fstream>
#include <stdlib.h>
#include <assert.h>
#include <string.h>
#include "cache.h"
main()
{
unsigned long long Address= 5555555555;
unsigned long a=5,b=7;
Cache L1Cache(a, b);
L1Cache.Calculate(Address);
}
cache.cc:
#include <stdio.h>
#include <iostream>
#include <fstream>
#include <assert.h>
#include <string.h>
#include <stdlib.h>
#include "cache.h"
using namespace std;
Cache::Cache(unsigned long c,unsigned long d)
{
e= c+d;
printf("Value Of e:%lu",e);
}
void Cache::Calculate(unsigned long long A)
{
printf("Value of e:%lu",e);
}
cache.h:
class Cache
{
public:
unsigned long e;
Cache(unsigned long c,unsigned long d)
void Calculate(unsigned long long A);
}
выход:
Value of e: =12;
Value of e: = garbage
Попробуйте отобразить фактический код для функции main(), например, предоставить небольшой, но полный (компилируемый, исполняемый) пример рабочего кода, который демонстрирует вашу проблему. Как вы описали, L1Cache является объявлением функции, а не объектом, поэтому оператор, вызывающий Calculate(), даже не компилируется. Аналогично, конструктор, который возвращает void, является недопустимым. – Rob
Попробуйте использовать отладчик для выполнения каждого утверждения по одному. Если вы не знаете, как использовать отладчик, сейчас самое время учиться. –
У меня был успех, когда я попытался передать переменную объекта «this». Поскольку в моем объекте будет так много переменных, я все еще не уверен, как я могу избежать использования «этого» для каждой переменной? –