2015-02-21 2 views
-5

Я новичок в 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 
+7

Попробуйте отобразить фактический код для функции main(), например, предоставить небольшой, но полный (компилируемый, исполняемый) пример рабочего кода, который демонстрирует вашу проблему. Как вы описали, L1Cache является объявлением функции, а не объектом, поэтому оператор, вызывающий Calculate(), даже не компилируется. Аналогично, конструктор, который возвращает void, является недопустимым. – Rob

+0

Попробуйте использовать отладчик для выполнения каждого утверждения по одному. Если вы не знаете, как использовать отладчик, сейчас самое время учиться. –

+0

У меня был успех, когда я попытался передать переменную объекта «this». Поскольку в моем объекте будет так много переменных, я все еще не уверен, как я могу избежать использования «этого» для каждой переменной? –

ответ

1

Там есть точка с запятой отсутствует в и после объявления класса. И главное должно быть int. После исправления кода. Вы действительно запускаете код, который, как вы думаете, вы используете?

Смежные вопросы