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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.70
smothdrive
6 / 0 / 1
Регистрация: 29.12.2011
Сообщений: 9
#1

Переменная не инициализирована - C++

26.06.2012, 17:43. Просмотров 1372. Ответов 11
Метки нет (Все метки)

Всем привет решил написать простенький класс.Вот обьявление:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#pragma once
#include <iostream>
#include <windows.h>
using namespace std;
#define UNLEN 256
class Name{
public:
    Name();
    ~Name();
    SYSTEMTIME GetuserTime(){return time;}
    wstring  * GetuserName(){return compname;}
    wstring * GetuserComputerName(){return name;}
private:
    wstring* name;
    wstring* compname;
    SYSTEMTIME time;
 
};
вот определеение
C++
1
2
3
4
5
6
7
8
9
10
Name::Name(){
    name[UNLEN+1];
    DWORD size = sizeof(name);
GetUserName((LPWSTR)name,&size);
compname[MAX_COMPUTERNAME_LENGTH+1];
    DWORD sizecomp=sizeof(compname);
    GetComputerName((LPWSTR)compname,&sizecomp);
    GetSystemTime(&time);
}
Name::~Name(){}
А вот сама прога использующая этот класс
C++
1
2
3
4
5
6
7
int _tmain(int argc, _TCHAR* argv[])
{
    Name * i =new Name;
    wstring * ifd = i->GetuserName();
    MessageBox(0,(LPWSTR)ifd,L"blabla",MB_OK);
    return 0;
}
Пишет что переменная не инициализирована.Пробую использовать new пишет в дебаге наршение прав доступа.А в релизе просто вылетает.Скажите что у меня может быть не правильно?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.06.2012, 17:43
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Переменная не инициализирована (C++):

Переменная не инициализирована - C++
Доброго времени суток. Tree.h #pragma once #include &lt;iostream&gt; template&lt;typename T&gt; struct Tree {

Условие того, что переменная не инициализирована - C++
Доброго времени суток! Можно ли как нибудь реализовать такое условие: &quot;Если переменная не инициализирована или в ходе работы программы не...

Ошибка: "переменная proverka не инициализирована" - C++
Здравствуйте. Выводится ошибка, в которой пишет,что переменная proverka не инициализирована. Не знаю как исправить. Задание и снимок ошибки...

Глобальная переменная определена в хидере. Компилятор ругается на то, что переменная переопределена несколько раз - C++
Исходники: /* main.cpp */ #include &quot;hider.h&quot; int main(void) { return 0; } /* foo.cpp */

Переменная или переменная и условие - C++
Привет всем. Стало интересно. Есть предположим функция. В ней ссылкой передается аргумент Status; Как лучше сделать? ...

переменная - C++
#include &lt;iostream&gt; using namespace std; void func1(); void func2(); int count; // Это голобальная переменная int main()...

11
edward_jonson
158 / 158 / 25
Регистрация: 23.02.2011
Сообщений: 392
26.06.2012, 18:16 #2
Не совсем по сути вопроса, но:
C++
1
2
    wstring  * GetuserName(){return compname;}
    wstring * GetuserComputerName(){return name;}
Здесь вы перепутали возвращаемые значения, я так думаю что должно быть
C++
1
2
    wstring  * GetuserName(){return name;}
    wstring * GetuserComputerName(){return compname;}
1
smothdrive
6 / 0 / 1
Регистрация: 29.12.2011
Сообщений: 9
26.06.2012, 20:17  [ТС] #3
Знаю.Уже исправил.

Добавлено через 34 минуты
Не ужели не кто не поможет.

Добавлено через 1 час 20 минут
ну помогите а то расплачусь
0
-=ЮрА=-
Заблокирован
Автор FAQ
27.06.2012, 00:13 #4
smothdrive, да память под name и compname ты неверно выделял да ещё и с new накосил. Вот работоспособный код на сонове твоей логики построения класса (я убрал из него юникод, т.к. смысла вообще в нём не вижу)
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
#include <string>
#include <iostream>
#include <windows.h>
using namespace std;
 
#define UNLEN 256
class Name
{
public:
    Name();
    ~Name();
    SYSTEMTIME GetuserTime(){return time;}
    char * GetuserName()    {return name;}
    char * GetuserComputerName(){return compname;}
private:
    char name    [UNLEN];
    char compname[UNLEN];
    SYSTEMTIME time;
};
 
Name::Name()
{
    DWORD size = sizeof(name);
    GetUserName(name,&size);
    DWORD sizecomp=sizeof(compname);
    GetComputerName(compname,&sizecomp);
    GetSystemTime(&time);
}
 
Name::~Name()
{
 
}
 
int main()
{
    Name * ptr =new Name();
    MessageBox(NULL,ptr->GetuserName(),"Caption",MB_OK);
    return 0;
}
2
Миниатюры
Переменная не инициализирована  
Вложения
Тип файла: rar smothdrive1.exe.rar (18.9 Кб, 2 просмотров)
Тип файла: rar smothdrive1_project.rar (24.5 Кб, 2 просмотров)
-=ЮрА=-
Заблокирован
Автор FAQ
27.06.2012, 00:29 #5
Что же касается меня, то я бы построил класс таким образом
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
#include <iostream>
#include <windows.h>
#include <lmcons.h>//UNLEN is defined in Lmcons.h.
using namespace std;
 
class Name
{
public:
    Name();
    ~Name();
    SYSTEMTIME GetuserTime();
    char * GetuserName();
    char * GetuserComputerName();
private:
    char *name    ;
    char *compname;
    SYSTEMTIME ptime;
};
 
Name::Name()
{
    name     = new char[UNLEN];
    compname = new char[UNLEN];
    ZeroMemory(&ptime,sizeof(SYSTEMTIME));
}
 
Name::~Name()
{
    if(name)
        delete [] name;
    if(compname)
        delete [] compname;
}
 
SYSTEMTIME Name::GetuserTime()
{
    GetLocalTime(&ptime);
    return ptime;
}
 
char * Name::GetuserName()
{
    DWORD size = UNLEN;
    GetUserName(name,&size);
    return name;
}
 
char * Name::GetuserComputerName()
{
    DWORD size = UNLEN;
    GetComputerName(compname,&size);
    return name;
}
 
int main()
{
    Name * ptr =new Name();
    MessageBox(NULL,ptr->GetuserName(),"INFO",MB_OK);
    MessageBox(NULL,ptr->GetuserComputerName(),"INFO",MB_OK);
    return 0;
}
2
Вложения
Тип файла: rar smothdrive2.exe.rar (21.5 Кб, 3 просмотров)
Тип файла: rar smothdrive2_project.rar (4.9 Кб, 3 просмотров)
smothdrive
6 / 0 / 1
Регистрация: 29.12.2011
Сообщений: 9
27.06.2012, 20:50  [ТС] #6
Спасибо большое все заработало.Но есть одна маленькая проблема.Я ниписал программу которая записывает данные класса в файл.Время системное выводит нормально но вот имя пользователя и компа нет(какие то каракули).вот код
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
int _tmain(int argc, _TCHAR* argv[])
{
    char filename[80];
    char close[82];
    cout<<"Enter File name: ";
    cin >> filename;
   ifstream fin(filename,ios::binary);
    Name file;
   fin.read((char*)&file,sizeof file);
   cout<<"\n User name is:"<<file.GetuserName();
   cout<<"\n User Computer name is:"<<file.GetuserComputerName();
   SYSTEMTIME time =file.GetuserTime();
   cout<<"\n User Year is: "<<time.wYear<<" User Month is: "<<time.wMonth<<" User DayOfWeek is: "<<time.wDayOfWeek<<" User Day is: "<<time.wDay<<" User Hour is: "<<time.wHour<<" User Minute is: "<<time.wMinute<< "User Second is: "<<time.wSecond<<" User Millisecond is: "<<time.wMilliseconds;
   cin >> close;
    return 0;
}
Добавлено через 1 час 59 минут
Опять все кинули меня?
0
-=ЮрА=-
Заблокирован
Автор FAQ
28.06.2012, 09:24 #7
Цитата Сообщение от smothdrive Посмотреть сообщение
Опять все кинули меня?
- никто тебя не кидал, к примеру у людей могут быть свои дела и заботы, более важные чем писанина кода. По поводу каракулей скажу - они от того что русские символы без специальных методов преобразования некорректно будут отображаться что в контексте консоли, что в контексте файла
Вариантов множество, но я предлагаю наиболее простой - использовать setlocale
Код класса абсолютно не требует никаких изменений, а вот код main я немножко преобразовал
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
int main()
{
    Name * ptr =new Name();
    setlocale(LC_ALL,"RUS");
    ofstream ofs("info.txt");
    ofs<<"UserName     : "<<ptr->GetuserName()<<endl;
    ofs<<"ComputerName : "<<ptr->GetuserComputerName()<<endl;
    ofs.close();
    cout<<"UserName     : "<<ptr->GetuserName()<<endl;
    cout<<"ComputerName : "<<ptr->GetuserComputerName()<<endl;
    system("pause");
    return 0;
}
1
Вложения
Тип файла: rar smothdriveRUS.exe.rar (52.5 Кб, 4 просмотров)
Тип файла: rar smothdriveRUS_project.rar (3.7 Кб, 2 просмотров)
-=ЮрА=-
Заблокирован
Автор FAQ
28.06.2012, 09:30 #8
После отработки алгоритма в каталоге с экзешником (а если отлаживаем то в каталоге проекта появиться файл info.txt с полученной инфой). Отработка приложения на скрине (имя своего компьютера я стёр, так что вместо белых полей идут конкретные имя пользователя и компьютера)
1
Миниатюры
Переменная не инициализирована  
smothdrive
6 / 0 / 1
Регистрация: 29.12.2011
Сообщений: 9
28.06.2012, 16:54  [ТС] #9
Вот доработаная версия моей проги.Русские буквы так и не отображает.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
    char filename[80];
    char close[82];
    setlocale(LC_ALL,"RUS");
    cout<<"Enter File name: ";
    cin >> filename;
   ifstream fin(filename,ios::binary);
    Name file;
   fin.read((char*)&file,sizeof file);
   cout<<"\n User name is:"<<file.GetuserName();
   cout<<"\n User Computer name is:"<<file.GetuserComputerName();
   SYSTEMTIME time =file.GetuserTime();
   cout<<"\n User Year is: "<<time.wYear<<" User Month is: "<<time.wMonth<<" User DayOfWeek is: "<<time.wDayOfWeek<<" User Day is: "<<time.wDay<<" User Hour is: "<<time.wHour<<" User Minute is: "<<time.wMinute<< "User Second is: "<<time.wSecond<<" User Millisecond is: "<<time.wMilliseconds;
   cin >> close;
0
-=ЮрА=-
Заблокирован
Автор FAQ
28.06.2012, 22:02 #10
smothdrive, прошу тебя перестань ты делать всё по своему!
Цитата Сообщение от smothdrive Посмотреть сообщение
ifstream fin(filename,ios::binary);
- прости за некую грубость, НО НА КОЙ ЧЁРТ ТЫ УПОРНО СТАВИШЬ ПОТОК ЧТЕНИЯ ifstream???!!!!!
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
ofstream ofs
, в файл пишут ofstream-ом а ifstream читают, как можно данные читать из файла, если логика твоей программы получить инфу и записать её в файл.
Цитата Сообщение от smothdrive Посмотреть сообщение
fin.read((char*)&file,sizeof file);
- объясни мне пожалуйста, чё это за хренотень написана???Ты privat поля класса считать хочешь, парень, думаешь головой что делаешь???Структуру ещё можно так считать, но для этого она хотябы в теле класса должна быть и не приват переменной. Рекомендую для этого в классе сделать реализовать отдельный метод.
Далее
Цитата Сообщение от smothdrive Посмотреть сообщение
Русские буквы так и не отображает.
, версия того в чём ты пишешь, что это DevC, 6-ая студия?Я подавал код для 9-й версии, причём проект надо открывать не через срр а через sln файл(если открывал срр и делал построение из существующего кода то гробил настройки проекта
Вобщем друг не расстаривай меня, вначале всё у тебя было гуд, я лишь только подталкивал, но сейчас когда уже подал код пишуший в файл инфу, на кой чёрт вот это делал
Цитата Сообщение от smothdrive Посмотреть сообщение
fin.read((char*)&file,sizeof file);
, жду от тебя переосмысления, возможно вопросов, а также чёткого указания компилятора на котором всё пытаешся реализовать.
НЕ злись на меня а пиши конкретно зачем ввёл чтение из файла и вообще
0
smothdrive
6 / 0 / 1
Регистрация: 29.12.2011
Сообщений: 9
01.07.2012, 20:13  [ТС] #11
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
smothdrive, прошу тебя перестань ты делать всё по своему!
- прости за некую грубость, НО НА КОЙ ЧЁРТ ТЫ УПОРНО СТАВИШЬ ПОТОК ЧТЕНИЯ ifstream???!!!!!, в файл пишут ofstream-ом а ifstream читают, как можно данные читать из файла, если логика твоей программы получить инфу и записать её в файл.
- объясни мне пожалуйста, чё это за хренотень написана???Ты privat поля класса считать хочешь, парень, думаешь головой что делаешь???Структуру ещё можно так считать, но для этого она хотябы в теле класса должна быть и не приват переменной. Рекомендую для этого в классе сделать реализовать отдельный метод.
Далее , версия того в чём ты пишешь, что это DevC, 6-ая студия?Я подавал код для 9-й версии, причём проект надо открывать не через срр а через sln файл(если открывал срр и делал построение из существующего кода то гробил настройки проекта
Вобщем друг не расстаривай меня, вначале всё у тебя было гуд, я лишь только подталкивал, но сейчас когда уже подал код пишуший в файл инфу, на кой чёрт вот это делал
, жду от тебя переосмысления, возможно вопросов, а также чёткого указания компилятора на котором всё пытаешся реализовать.
НЕ злись на меня а пиши конкретно зачем ввёл чтение из файла и вообще
Мне нужно чтение из бинарного файла.У меня уже есть прога для записи в фаил там проблемм нет.Приват переменную я получаю функцией.У меня 10 студия(2010)
0
smothdrive
6 / 0 / 1
Регистрация: 29.12.2011
Сообщений: 9
02.07.2012, 21:09  [ТС] #12
алё люди
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.07.2012, 21:09
Привет! Вот еще темы с ответами:

Переменная - C++
Мне нужная переменная(ые) в 1 байт. Где её можно взять?

Переменная не инициализирована - C (СИ)
консольное окно не активно

Хочу написать программу для подсчета площади прямоугольника, на строке S = count(S, a, b); выдает ошибку переменная S возможно не инициализирована. - Java SE
Помогите начинающему програмисту, пожалуйста. Хочу написать программу для подсчета площади прямоугольника, на строке S = count(S, a, b);...

Ошибка: "Переменная ххх могла быть не инициализирована." - Java SE
Я пытаюсь создать строку: public void tracking(String goal, String fileData, String consol) { final String currentLogPath =...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Yandex
Объявления
02.07.2012, 21:09
Ответ Создать тему
Опции темы

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