Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Передача сссылки в класс через конструктор 
:(
    Опции темы
kurtis
Дата 7.7.2008, 17:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 65
Регистрация: 10.8.2007

Репутация: нет
Всего: нет



Есть код
Код

#include <stdio.h>

class CRefer
    {
    private:
    public:
        int& A;
        void ChangeA() { 
            A = 50; 
        };
        CRefer(int& A) {;};
    };

int main()
{
    int BLA = 100;

    printf ("BLA = %d\n",BLA);   // BLA = 100
    CRefer MyClass1(BLA);  
    MyClass1.ChangeA();   //присваиваю BLA = 50
    printf ("BLA = %d\n",BLA);    // Ожидаю получить BLA = 50

    return 0;
}
Хочу чтоб класс изменял значение какой-то внешней переменной, пытаюсь передать эту переменную через ссылку, но как-то оно у меня не очень получается....=((  Компилятор выдает такую ошибку
Цитата

main.cpp: In constructor `CRefer::CRefer(int&)':
main.cpp:11: error: uninitialized reference member `CRefer::A'
Собсно вопрос, что я делаю не так???
З.Ы. Делать через указатель не хочу, хочу именно через ссылку...
PM MAIL   Вверх
Annihilator
Дата 7.7.2008, 17:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


bytegrinder
**


Профиль
Группа: Участник
Сообщений: 493
Регистрация: 21.11.2006
Где: Омск

Репутация: 1
Всего: 3



Код

#include "stdafx.h"
#include <stdio.h>

class CRefer
    {
    private:
    public:
        
        void ChangeA(int& A) { 
            A = 50; 
        };
        CRefer(int& A) {;};
    };

int main()
{
    int BLA = 100;

    printf ("BLA = %d\n",BLA);   // BLA = 100
    CRefer MyClass1(BLA);  
    MyClass1.ChangeA(BLA);   //присваиваю BLA = 50
    printf ("BLA = %d\n",BLA);    // Ожидаю получить BLA = 50

    return 0;

}#include "stdafx.h"
#include <stdio.h>

class CRefer
    {
    private:
    public:
        
        void ChangeA(int& A) { 
            A = 50; 
        };
        CRefer(int& A) {;};
    };

int main()
{
    int BLA = 100;

    printf ("BLA = %d\n",BLA);   // BLA = 100
    CRefer MyClass1(BLA);  
    MyClass1.ChangeA(BLA);   //присваиваю BLA = 50
    printf ("BLA = %d\n",BLA);    // Ожидаю получить BLA = 50

    return 0;

}#include "stdafx.h"
#include <stdio.h>

class CRefer
    {
    private:
    public:
        
        void ChangeA(int& A) { 
            A = 50; 
        };
        CRefer(int& A) {;};
    };

int main()
{
    int BLA = 100;

    printf ("BLA = %d\n",BLA);   // BLA = 100
    CRefer MyClass1(BLA);  
    MyClass1.ChangeA(BLA);   //присваиваю BLA = 50
    printf ("BLA = %d\n",BLA);    // Ожидаю получить BLA = 50

    return 0;

}


у тебя ссылка ни на что не ссылается, так нельзя! Вот и ошибка соответственно


Это сообщение отредактировал(а) Annihilator - 7.7.2008, 17:57


--------------------
Если вы не можете сделать хоpошyю пpогpаммy, сделайте, чтобы она по кpайней меpе выглядела хоpошо
PM ICQ   Вверх
T0ohtik
Дата 7.7.2008, 18:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 115
Регистрация: 9.2.2008

Репутация: 1
Всего: 1



Annihilator, найди 10 отличий?

kurtis, ты сыылку то в конструктор передал, но на запомнил её в переменную А
Код

#include <stdio.h>
class CRefer
    {
    private:
        int A;
    public:
         void ChangeA() 
        { 
            A = 50; 
        };
        CRefer(int& p) 
          : A(p)
        {}
    };
int main()
{
    int BLA = 100;
    printf ("BLA = %d\n",BLA);   // BLA = 100
    CRefer MyClass1(BLA);  
    MyClass1.ChangeA();   //присваиваю BLA = 50
    printf ("BLA = %d\n",BLA);    // Ожидаю получить BLA = 50
    return 0;
}
.


Это сообщение отредактировал(а) T0ohtik - 7.7.2008, 18:15
PM MAIL   Вверх
Lazin
Дата 7.7.2008, 18:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

Репутация: 27
Всего: 154



Код

class CRefer
    {
        int &A;//<----- твоя ошибка была здесь
    public:
        void ChangeA() 
        { 
            A = 50; 
        }
        CRefer(int& p) 
          : A(p)
        {}
    };

PM MAIL Skype GTalk   Вверх
Annihilator
Дата 7.7.2008, 18:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


bytegrinder
**


Профиль
Группа: Участник
Сообщений: 493
Регистрация: 21.11.2006
Где: Омск

Репутация: 1
Всего: 3



T0ohtik, ты свой код вбей и убедись, что он неправильно работает.

Цитата(kurtis @  7.7.2008,  21:41 Найти цитируемый пост)
Цитатаmain.cpp: In constructor `CRefer::CRefer(int&)':main.cpp:11: error: uninitialized reference member `CRefer::A'Собсно вопрос, что я делаю не так???

Написано понятно "Неинициализированная ссылка"
А то, что ты написал 
Код

CRefer(int& p) 
          : A(p)

таким образом ты А поменяешь, которая никоим образом с BLA не связана.


--------------------
Если вы не можете сделать хоpошyю пpогpаммy, сделайте, чтобы она по кpайней меpе выглядела хоpошо
PM ICQ   Вверх
kurtis
Дата 7.7.2008, 18:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 65
Регистрация: 10.8.2007

Репутация: нет
Всего: нет



Annihilator, 
Спасибо, код работает=))

T0ohtik, 
Спасибо за помощь!!!!но, код не работает, в обоих случаях выводит BLA равным 100, 

З.Ы. компилятор MinGW

Добавлено через 2 минуты и 41 секунду
Lazin, 
Вот это именно то что нужно!!!Огромное спасибо!!!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0527 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.