Кинул на форму edit box
В нем нужно изменить значение по вызову функции, вызов функции находиться в функторе:
Вод код:
// 7prDlg.cpp : implementation file
//
#include "stdafx.h"
#include "7pr.h"
#include "7prDlg.h"
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#include <time.h>
const short n = 10;
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
// CAboutDlg dialog used for App About
class CAboutDlg : public CDialog
{
public:
CAboutDlg();
// Dialog Data
enum { IDD = IDD_ABOUTBOX };
protected:
virtual void DoDataExchange(CDataExchange* pDX);// DDX/DDV support
// Implementation
protected:
DECLARE_MESSAGE_MAP()
};
/* вырезано за ненадобностью*/
using namespace std;
class MyFunctor
{
private:
int sum, sum2;
int count, count2;
int maxi, mini;
int val1, val2;
public:
MyFunctor():sum(0), sum2(0), count(0), count2(0), maxi(0), mini(0){};
void operator() (int val)
{
/* вырезано за ненадобностью*/
}
double get_MyFunctor()
{
CMy7prDlg::edit2_caption=" ";//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
/* вырезано за ненадобностью*/
return 0;
}
};
//global value
MyFunctor func;
vector<int> vec;
void CMy7prDlg::OnBnClickedOk2()
{
/* вырезано за ненадобностью*/
}
void CMy7prDlg::OnBnClickedOk3()
{
double average = (for_each(vec.begin(), vec.end(), MyFunctor())).get_MyFunctor();
// TODO: Add your control notification handler code here
}
Строка помеченная воскл. знаками вина: при такой реализации выдает ошибку:
illegal reference to non-static member 'CMy7prDlg::edit2_caption'
если в .h прописать что static edit2_caption то:
error C2438: 'edit2_caption' : cannot initialize static class data via constructor
как же всетаки обратиться к этому editBox?
21 ноября 2008 в 16:02
Как я понимаю edit2_caption это переменная типа CString ?
тогда UpdateData нужен!
21 ноября 2008 в 14:01
аааа ну тогда так
CMy7prDlg* someDialog = new CMy7prDlg();
…
double MyFunctor::get_MyFunctor()
{
someDialog->edit2_caption = "TEXT";
}
21 ноября 2008 в 11:05
э… кто так делает?
CMy7prDlg::edit2_caption
Тебе же правильно сказали… обращайся к переменной экземпляра класса… а не к Просто переменной этого класса. Компилятор просто не понимает что ты хочешь сделать. Передай указатель на экземпляр класса и меняй…
и не забудь вызвать вызвать UpdateData если edit2_caption не контрол-типа.
21 ноября 2008 в 10:05
edit_caption- это переменная связанная с текстом находяшимсяв editbox
21 ноября 2008 в 3:04
нужно обращаться не к класу, а к объекту. например:
CMy7prDlg* someDialog = new CMy7prDlg();
…
double MyFunctor::get_MyFunctor()
{
HWND edit_box = getDlgItem(someDialog, edit2_caption);
setWindowText(edit_box, "TEXT");
// или
// sendMessage(edit_box, WM_SETTEXT, (WPARAM)0, (LPARAM)"TEXT");
}
ну это, конечно, если у тя edit2_caption – ID editbox'a