Есть вопрос?
Зайди на форум

Поиск на сайте: Advanced

Denix - новый дистрибутив Linux. Русификация Ubuntu и установка кодеков

dkws.org.ua
Форум сайта dkws.org.ua
 
Главная    ТемыТемы    АльбомАльбом    РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 

С++ указатели

 
Начать новую тему Ответить на тему    Список форумов dkws.org.ua -> Программирование/C/C++
 
Автор Сообщение
ruslan89

Завсегдатай


Зарегистрирован: 09.01.2010
Сообщения: 799

СообщениеДобавлено: Вт Окт 19, 2010 3:56 pm    Заголовок сообщения: С++ указатели
Ответить с цитатой

хочу писать в переменную (она инициализирована в другой функции) по её адресу. делаю вот так:
Код:

void MainWindow::on_comboBox_currentIndexChanged(QString )
{
extern float ak;
float* akk;
akk = &ak;
    switch (ui->comboBox->currentIndex()){
        case 0: *akk = 1; break;
        case 1: *akk = 0.01; break;
        case 2: *akk = 0.001; break;
    }


во время компилирования: "undefined reference to ak". понимаю что "чужие" переменные не получиться править, но неужели этого нельзя сделать даже через указатель?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Anderson

Завсегдатай


Зарегистрирован: 08.07.2006
Сообщения: 642
Откуда: localhost

СообщениеДобавлено: Вт Окт 19, 2010 4:03 pm    Заголовок сообщения:
Ответить с цитатой

ну, через extern получится передать только тогда, если она видима в данной функции или является глобальной.
либо передавай &ak в качестве аргумента, либо...хз
_________________
ArchLinux + Enlightenment 17 (E17)
Вернуться к началу
Посмотреть профиль Отправить личное сообщение anderson.dunai@gmail.com Моб. телефон ICQ Number
ruslan89

Завсегдатай


Зарегистрирован: 09.01.2010
Сообщения: 799

СообщениеДобавлено: Вт Окт 19, 2010 4:11 pm    Заголовок сообщения:
Ответить с цитатой

а с помощью директивы extern я не делаю её видимой в данной функции?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
ruslan89

Завсегдатай


Зарегистрирован: 09.01.2010
Сообщения: 799

СообщениеДобавлено: Вт Окт 19, 2010 4:15 pm    Заголовок сообщения:
Ответить с цитатой

ладно.......а как можно передать &ak в качестве аргумента?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Anderson

Завсегдатай


Зарегистрирован: 08.07.2006
Сообщения: 642
Откуда: localhost

СообщениеДобавлено: Вт Окт 19, 2010 4:36 pm    Заголовок сообщения:
Ответить с цитатой

void foo(float *bar)
{
bar=0.456;
}

float fVar = 0.123;
// тут fVar равно 0.123
foo(&fVar);
// а тут fVar уже равно 0.456
_________________
ArchLinux + Enlightenment 17 (E17)
Вернуться к началу
Посмотреть профиль Отправить личное сообщение anderson.dunai@gmail.com Моб. телефон ICQ Number
ruslan89

Завсегдатай


Зарегистрирован: 09.01.2010
Сообщения: 799

СообщениеДобавлено: Ср Окт 20, 2010 1:13 pm    Заголовок сообщения:
Ответить с цитатой

хорошо. а как аналогичное проделать в проекте с Qt
Код:

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <math.h>

float ak = 1,    lk = 1;
short Ek = 9;

float min_inerc(float a, float b){
    float I;

    I = (a > b) ? a*pow(b,3)/12 : b*pow(a,3)/12;

    return I;
}

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::changeEvent(QEvent *e)
{
    QMainWindow::changeEvent(e);
    switch (e->type()) {
    case QEvent::LanguageChange:
        ui->retranslateUi(this);
        break;
    default:
        break;
    }
}


void MainWindow::on_pushButton_pressed()
{
    float a, b;    float l;    float nu;    float E;    QString str2;


    a = (ui->lineEdit->text()).toFloat();

    b = (ui->lineEdit_2->text()).toFloat();

    l = (ui->lineEdit_3->text()).toFloat();

    nu = (ui->lineEdit_4->text()).toFloat();

    E = (ui->lineEdit_5->text()).toFloat();

   
    str2.setNum(pow(M_PI,2) * (E*pow(10,Ek)) * min_inerc(a*ak, b*ak) / pow((l*lk)*nu,2));


    ui->lineEdit_6->setText(str2);

}


void MainWindow::on_comboBox_currentIndexChanged(QString )
{

    switch (ui->comboBox->currentIndex()){
        case 0: ak = 1; break;
        case 1: ak = 0.01; break;
        case 2: ak = 0.001; break;
    }
}

void MainWindow::on_comboBox_2_currentIndexChanged(QString)
{
    switch (ui->comboBox_2->currentIndex()){
        case 0: lk = 1; break;
        case 1: lk = 0.01; break;
        case 2: lk = 0.001; break;
    }
}

void MainWindow::on_comboBox_3_currentIndexChanged(QString )
{
    switch (ui->comboBox_3->currentIndex()){
        case 0: Ek = 9; break;
        case 1: Ek = 6; break;
        case 2: Ek = 3; break;
    }
}

Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Anderson

Завсегдатай


Зарегистрирован: 08.07.2006
Сообщения: 642
Откуда: localhost

СообщениеДобавлено: Чт Окт 21, 2010 6:58 am    Заголовок сообщения:
Ответить с цитатой

Советую сделать ak, lk и Ek свойствами функции, то есть в MainWindow.h дописать в private:
Код:
private:
// ...
float ak, lk, Ek;


Затем их можна изменять из любой функции-метода, которая принадлежит к MainWindow.
Затем функцию float min_inerc(float a, float b) в файле MainWindow.h добавляешь в секцию "public"
Код:
public:
float min_inerc(float a, float b)

а в файле MainWindow.cpp меняешь заголовок функции на
Код:
float MainWindow::min_inerc(float a, float b)


После чего свободно везде меняешь ak, lk и Ek Wink
_________________
ArchLinux + Enlightenment 17 (E17)
Вернуться к началу
Посмотреть профиль Отправить личное сообщение anderson.dunai@gmail.com Моб. телефон ICQ Number
ruslan89

Завсегдатай


Зарегистрирован: 09.01.2010
Сообщения: 799

СообщениеДобавлено: Чт Окт 21, 2010 2:40 pm    Заголовок сообщения:
Ответить с цитатой

вот спасибо! протрезвею попробую! Smile
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Anderson

Завсегдатай


Зарегистрирован: 08.07.2006
Сообщения: 642
Откуда: localhost

СообщениеДобавлено: Пт Окт 22, 2010 12:21 am    Заголовок сообщения:
Ответить с цитатой

ruslan89, не за что!=) Я тоже го трезветь и спать)))
_________________
ArchLinux + Enlightenment 17 (E17)
Вернуться к началу
Посмотреть профиль Отправить личное сообщение anderson.dunai@gmail.com Моб. телефон ICQ Number
Показать сообщения:   
Начать новую тему Ответить на тему    Список форумов dkws.org.ua -> Программирование/C/C++ Часовой пояс: GMT
Страница 1 из 1
 Главная страница сайта
 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
© Колисниченко Денис