|
Автор |
Сообщение |
ruslan89
Завсегдатай
Зарегистрирован: 09.01.2010 Сообщения: 799
|
|
|
|
хочу писать в переменную (она инициализирована в другой функции) по её адресу. делаю вот так:
Код: |
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
|
|
|
|
ну, через extern получится передать только тогда, если она видима в данной функции или является глобальной.
либо передавай &ak в качестве аргумента, либо...хз _________________ ArchLinux + Enlightenment 17 (E17) |
|
Вернуться к началу |
|
|
ruslan89
Завсегдатай
Зарегистрирован: 09.01.2010 Сообщения: 799
|
|
|
|
а с помощью директивы extern я не делаю её видимой в данной функции? |
|
Вернуться к началу |
|
|
ruslan89
Завсегдатай
Зарегистрирован: 09.01.2010 Сообщения: 799
|
|
|
|
ладно.......а как можно передать &ak в качестве аргумента? |
|
Вернуться к началу |
|
|
Anderson
Завсегдатай
Зарегистрирован: 08.07.2006 Сообщения: 642 Откуда: localhost
|
|
|
|
void foo(float *bar)
{
bar=0.456;
}
float fVar = 0.123;
// тут fVar равно 0.123
foo(&fVar);
// а тут fVar уже равно 0.456 _________________ ArchLinux + Enlightenment 17 (E17) |
|
Вернуться к началу |
|
|
ruslan89
Завсегдатай
Зарегистрирован: 09.01.2010 Сообщения: 799
|
|
|
|
хорошо. а как аналогичное проделать в проекте с 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
|
|
|
|
Советую сделать 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 _________________ ArchLinux + Enlightenment 17 (E17) |
|
Вернуться к началу |
|
|
ruslan89
Завсегдатай
Зарегистрирован: 09.01.2010 Сообщения: 799
|
|
|
|
вот спасибо! протрезвею попробую! |
|
Вернуться к началу |
|
|
Anderson
Завсегдатай
Зарегистрирован: 08.07.2006 Сообщения: 642 Откуда: localhost
|
|
|
|
ruslan89, не за что!=) Я тоже го трезветь и спать))) _________________ ArchLinux + Enlightenment 17 (E17) |
|
Вернуться к началу |
|
|
|
|