Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

Передать переменную из класса в класс - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Std::thread::detach() http://www.cyberforum.ru/cpp-beginners/thread1764072.html
Что произойдет, если main - поток завершится раньше чем child.detach()? Добавлено через 3 минуты У меня программа просто завершилась и cout << перестал выводить текст в консоль, это точно...
C++ Найти кол-во исходных сообщений Помогите новичку( Задание: В сообщение, состоящем из заглавных русских букв и пробелов, каждую букву заменили её порядковым номером в русском алфавите (А-1, Б-2,.., Я-33), а пробел - нулем. ... http://www.cyberforum.ru/cpp-beginners/thread1764069.html
Работа со строками и файлами C++
Записать в файл элементы другого файла (со словами) выровненные по правому краю. Программно переименовать файл.
Чтение из файла двумерного массива чисел (visual studio 2008) C++
Добрый день. Прошу помочь с чтением из файла двумерного вектора в visual studio 2008. На форуме видел множество примеров, но VS выдает ошибки при компилировании. Итак, файл имеет такую...
C++ Программа Окружность в ромб http://www.cyberforum.ru/cpp-beginners/thread1764033.html
Напишите программу, отображающую окружность, плавно перетекающую в ромб, и наоборот; цвет периодически изменяется. Помогите сделать программу на C++ c помощью OpenGL, в прошлом месяце провели...
C++ от какого имени запущен программа поставьте на правильный путь: возникла задача, в определении программой от имени кого она была запущена как реализовать? подробнее

Показать сообщение отдельно
Ирина197708
10 / 10 / 1
Регистрация: 06.08.2011
Сообщений: 139
17.06.2016, 16:42  [ТС]
Цитата Сообщение от nmcf Посмотреть сообщение
class_B() { char[0] = '\0'; }
Здесь видимо должна быть переменная?

Добавлено через 25 минут
В любом случае, спасибо. Твой Вариант работает.
Но в моей реализации это не подойдет.
Ты присваиваешь значение классу А в функции main() , а мне необходимо получить именно в класс. Так сказать на лету.
Может код поможет понять что у меня не получается:
mythread.cpp получает данные из сокета:

recievedBytes = recv( clientSocket, buffer, BUFFER_SIZE - 1, 0 );
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
 
#include "mythread.h"
#include "widget.h"
#include <iostream>
 
#define PORT 1515
#define BUFFER_SIZE 1024
#define MEMORY_SIZE BUFFER_SIZE * sizeof(char)
#define GET_SOCKET_ERROR std::cout << WSAGetLastError() << std::endl
 // char* buff[1024];
   char buffer[ 1024 ];
   extern int value;
int i;
MyThread::MyThread() { stopped = false; }
 
void MyThread::run(){
  while (!stopped)
        if( WSAStartup( MAKEWORD( 2, 2 ), &wsa ) == 0 )
      {
          serverAcceptor = socket( AF_INET, SOCK_STREAM, 0 );
 
          if( serverAcceptor )
          {
              sockaddr_in serverAddress;
 
              ZeroMemory( &serverAddress, sizeof( sockaddr_in ) );
              serverAddress.sin_family = AF_INET;
              serverAddress.sin_port = htons( 1515 );
              serverAddress.sin_addr.S_un.S_addr = htonl( INADDR_LOOPBACK );
 
              if( ( bind( serverAcceptor, reinterpret_cast< const sockaddr* >( &serverAddress ), sizeof( sockaddr_in ) ) != SOCKET_ERROR ) &&
                  ( listen( serverAcceptor, 1 ) != SOCKET_ERROR ) )
              {
                 // const int BUFFER_SIZE = 1024;
                  int clientAddressLength = sizeof( sockaddr_in );
                //  char buffer[ BUFFER_SIZE ];
 
                  sockaddr_in clientAddress;
                  SOCKET clientSocket;
 
                  ZeroMemory( &clientAddress, sizeof( sockaddr_in ) );
 
                  while( true )
             //     if(true)
                  {
                      const int CLIENT_ADDR_STR_SIZE = 64;
                      char clientAddressStr[ CLIENT_ADDR_STR_SIZE ];
 
                      int recievedBytes = 0;
                      int sendedBytes = 0;
 
                      std::cout << "Start listening..." << std::endl;
                      clientSocket = accept( serverAcceptor, reinterpret_cast< sockaddr* >( &clientAddress ), &clientAddressLength );
 
                      if( clientSocket != INVALID_SOCKET )
                      {
                          do
                          {
                              std::string sendBuffer;
 
                              ZeroMemory( buffer, BUFFER_SIZE );
                              ZeroMemory( clientAddressStr, CLIENT_ADDR_STR_SIZE );
 
                              recievedBytes = recv( clientSocket, buffer, BUFFER_SIZE - 1, 0 );
 
                              if( recievedBytes != SOCKET_ERROR )
                              {
                                  std::cout << "--> " << buffer << " [ bytes: " << recievedBytes << " ]" << std::endl;
                                  //забрать переменную buffer
                              get_buffer();
 
                                  sendBuffer = buffer;
                                  sendBuffer = "From server: " + sendBuffer;
 
                                  do
                                  {
                                      sendedBytes = send( clientSocket, sendBuffer.c_str(), sendBuffer.size() + 1, 0 );
                                        printf(" sendedBytes: %d", sendedBytes);
                                  } while( false );
                              }
 
                          } while( ( recievedBytes != SOCKET_ERROR ) && ( sendedBytes != SOCKET_ERROR ) );
 
                          std::cout << std::endl <<  "Client lost." << std::endl;
                          closesocket( clientSocket );
                      }
                      else
                      {
                          GET_SOCKET_ERROR;
                          break;
                      }
                  }
 
                  closesocket( serverAcceptor );
              }
              else { GET_SOCKET_ERROR; }
          }
          else { GET_SOCKET_ERROR; }
 
          WSACleanup();
      }
      else{ std::cout << WSAGetLastError() << std::endl; }
 
  //    return 1;
  stopped = false;
  strcpy(buffers, buffer);
 
}
 
 
void MyThread::stop(){
    stopped = true;
    closesocket( serverAcceptor );
     WSACleanup();
}
 
//void MyThread::setMessage(const QString &message){ }
MyThread::get_buffer(){
    printf ("get_buffer(buffer) =  %s",buffer);
    value = atoi(buffer);
    printf("value =  %d", value);
    return value;
}
В итоге переменная buffer должна попасть в метку label на форме:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
#include "widget.h"
#include "mythread.h"
extern int value;
extern char buffer[ 1024 ];
Widget::Widget(QWidget *parent)
    : QWidget(parent)
{
  setWindowTitle("Избирательная система");
    setGeometry(200,20,50,20);
    resize(365,200);
 
 
 //   threadA.setMessage("A");
 
     layout = new QGridLayout(this);
     threadAlabel = new QLabel("fff");
 //    threadAlabel->setText(buffer);
     threadAButton = new QPushButton("Запустить поток");
     StopServer = new QPushButton("Остановить поток");
     getBuffer = new QPushButton("Получить данные");
 
 //   connect(threadA, SIGNAL(clicked()), threadAlabel, SLOT(LabelSetText()));
     connect(threadAButton, SIGNAL(clicked()), this, SLOT(StartServer()));
     connect(getBuffer, SIGNAL(clicked()), this, SLOT(LabelSetText()));
 
     connect(StopServer, SIGNAL(clicked()), this, SLOT(stopserver()));
     connect(StopServer, SIGNAL(clicked()), this, SLOT(close()));
  //   QObject::connect()
     layout->addWidget(threadAlabel);
     layout->addWidget(threadAButton);
     layout->addWidget(getBuffer);
     layout->addWidget(StopServer);
    }
 
Widget::~Widget(){ }
 
 
void Widget::StartServer(){
    if(threadA.isRunning() != true){
        //threadAButton->setText(tr("Запустить поток"));
        threadA.start();
        MyThread a;
       buff1 = a.buffers;
      // if (threadA.get_buffer() == "1"){printf("printf"); }
    }
/*
 
    if (threadA.isRunning())
    {threadA.stop();
        threadAButton->setText(tr("Остановить сервер"));}
    else {
       // threadA.start();
        threadAButton->setText(tr("Принять данные"));}
   // int k = threadA.get_Server();
   // printf("%d",k);
  //  threadAlabel->setText(QString::number(k));
    */
}
void Widget::stopserver(){
    if(threadA.isRunning()){
        threadA.stop();
    }
}
void Widget::closeEvent(QCloseEvent *event)
{
    threadA.stop();
 
    threadA.wait();
 
       // threadAlabel->setText("arbat");
    }
 
 //   event->accept();
 
void Widget::LabelSetText(){
    printf("buffer in labelsettext %s =  ", buffer);  
    int i=0;
     i = atoi(buffer);
    printf("i = %d", i);
        threadAlabel->setText("1");   //ВОТ СЮДА ДОЛЖНА ПОПАСТЬ ПЕРЕМЕННАЯ buffer из класса mythread
 
    // printf("threadA.get_buffer() = %s",threadA.get_buffer());
 
}
Класс же main только создает виджет и отображает форму...
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include "widget.h"
#include "mythread.h"
#include <QApplication>
#include <QThread>
 
int value;
int main(int argc, char *argv[])
{
 
    QApplication a(argc, argv);
    Widget w;
    w.show();
    return a.exec();
}

На qt внимание не обращать.
Код сервера рабочий, кроме того что не могу никак передать переменную...
0
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru