есть такой код,как сделать месте int чтоб вводилось все double,int,float,string =\ Code: #include <stdio.h> #include <iostream> #include <conio.h> using namespace std; int main() { int x; cin >> x ; std::cout << x; getch(); }
хелп плиз.. msvs 2008 windows form app (в консольном варианте не каких исключений не выдавало!!!! ((() Code: ............... strcpy(gHost,"google.com"); hostent *hHost = new hostent(); hHost = gethostbyname(gHost); vkaddr.sin_family = AF_INET; vkaddr.sin_port = htons(80); CopyMemory(&vkaddr.sin_addr,hHost->h_addr_list[0],hHost->h_length); ............. строка c функц copymemory выдает исключение Code: System.NullReferenceException was unhandled Message="В экземпляре объекта не задана ссылка на объект." Source="vk_" StackTrace: в avtoriz.avt(avtoriz* , massive* , SByte* gHost, SByte* gRequest) в c:\users\администратор\documents\visual studio 2008\projects\vk_\vk_\vk_avtoriz.h:строка 44 в vk_.Form1.button1_Click(Object sender, EventArgs e) в c:\users\администратор\documents\visual studio 2008\projects\vk_\vk_\form1.h:строка 211 в System.Windows.Forms.Control.OnClick(EventArgs e) в System.Windows.Forms.Button.OnClick(EventArgs e) в System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent) в System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks) в System.Windows.Forms.Control.WndProc(Message& m) в System.Windows.Forms.ButtonBase.WndProc(Message& m) в System.Windows.Forms.Button.WndProc(Message& m) в System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m) в System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m) в System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam) в System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg) в System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(Int32 dwComponentID, Int32 reason, Int32 pvLoopData) в System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context) в System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context) в System.Windows.Forms.Application.Run(Form mainForm) в main(String[] args) в c:\users\администратор\documents\visual studio 2008\projects\vk_\vk_\vk_.cpp:строка 16 InnerException: чо делать
Nelz., может быть, так? Code: #include <iostream> #include <cstdio> using namespace std; int main() { char str[100]; // 100 символов gets(str); cout << str; return 0; }
cupper Берешь и делаешь test2.h таким: PHP: #ifndef __TEST_2__ #define __TEST_2__ #include "test1.h" #include <vector> class Address; class Persone { std::vector<Address> address; }; #endif И твой пример начинает компилироваться. В таком случае прокатило даже с условием, что используется не указатель на класс, потому что хедер все-таки подключен. Кстати, вместо всяких #ifndef используй #pragma once и больше ничего.
неа. Так вообще не какой разницы. Смотри, в test2.h используется класс из test1.h, предположим что мы подключаем в main.c хедер test2.h тогда в нем от начала файла вначале будет развернут tets1.h (подключенный в test2.h) потом test2.h. Таким образом в test2.h спокойно можно использовать все что есть в test1.h Смотри дальше. test1.h сделан абсолютно также как и test2.h. Таким образом если мы в Main.c подключаем вначале test1.h то развертка хедеров выклядет так test2.h test1.h ... в получается в test1.h можно использовать все из test2.h думаю ты уже догадался к чему я. Таким образом в зависимости от того какой хедер первым вы подключаем в main.c тот и будет работать. А второй хедер ссылается на первый, но логически он находится ниже него по коду и он о нем не знает, и как жалуется. Какая то мрачная картина получается Единственным выходом из этого дедлока вижу только полное не взаимодействие этих двух классов между собой. И добавлении двух новых классов каждый их которых содержит элемент первого класса и список из элементов другого классов. Это даже как то лучше с точки зрения инкапсуляции выглядит
дык все что я написал выше идет с учетом всего что раньше было предложено Code: #include "test2.h" class Address; class Persone{... -------------------------------------- #include "test1.h" class Persone; class Address{...
Пишу программу-заглушку (проблемы с кодом) Доброго времени суток. Пишу программу заглушку, которая создает ЭЦП (на С++Builder6). Проблема такая. Не могу вычислить количество оперативной памяти. Вот Весь код (выкладываю с целю примера вычисления c других параметров). Code: #define NO_WIN32_LEAN_AND_MEAN #include <vcl.h> #include <shlobj.h> #include <vcl\registry.hpp> #pragma hdrstop #include "Unit1.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; //--------------------------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender) { TRegistry *RegKey=new TRegistry; //для работы с реестром HCRYPTHASH hHash; //для работы с хеш-обьектом HCRYPTPROV hProv; //криптопровайдер HCRYPTKEY hSignKey; //ключ ЭЦП BYTE Sign[MAX_PATH]; //буфер для ЭЦП DWORD SigLen=sizeof(Sign); //длина ЭЦП //получение доступа к криптопровайдеру if(!CryptAcquireContext(&hProv,NULL,NULL,PROV_RSA_FULL,0)) if((unsigned)GetLastError()==NTE_BAD_KEYSET) CryptAcquireContext( &hProv,NULL,NULL, PROV_RSA_FULL, CRYPT_NEWKEYSET); else throw Exception("Ошибка при инсталяции CryptoAPI!"); // создание хеш-объекта и хеширование имени пользователя // имя пользователя char Buf1[MAX_COMPUTERNAME_LENGTH+1]; int data; [b]void GlobalMemoryStatus(LPMEMORYSTATUS lpBuffer);[/b] // длина имени пользователя unsigned long Len; //создание пустого хеш-объекта CryptCreateHash(hProv,CALG_SHA,0,0,&hHash); //получение имени пользователя и добавление его в хеш-объект Len=sizeof(Buf1); if(GetUserName(Buf1,&Len)) CryptHashData(hHash,Buf1,lstrlen(Buf1),0); //хеширование ширины экрана монитора data=GetSystemMetrics(SM_CXSCREEN); if (data) CryptHashData (hHash, (BYTE*) data, sizeof (data), 0); /////////////////////////////////// //определение количества оперативной памяти [b] typedef struct _MEMORYSTATUS { DWORD dwLength; } MEMORYSTATUS, *LPMEMORYSTATUS; MEMORYSTATUS mem; IntToStr(mem.dwLength ) = sizeof(MEMORYSTATUS); unsigned int value; //количество Мб в ОП // передача переменной mem для её заполнения информацией об ОП GlobalMemoryStatus(&mem); // [u]<---------здесь ругается[/u] value = mem.dwTotalPhys/1024/1024; //из байт в Мб[/b] //в хеш-объект пока не могу добавить т.к. выше ошибка ///////////////////////////////////////////////////////// CopyFile((GetCurrentDir()+"\\Project1.exe").c_str(), "C:\\temp\\Project1.exe",FALSE); RegKey->OpenKey(RegKey->CurrentPath+"\\SOFTWARE\\"+Edit1->Text,true); SetCurrentDir("C:\\temp"); if(!CryptGetUserKey(hProv,AT_SIGNATURE,&hSignKey)) CryptGenKey(hProv,AT_SIGNATURE,0,&hSignKey); CryptSignHash(hHash,AT_SIGNATURE,NULL,0,Sign,&SigLen); RegKey->WriteBinaryData("Signature",(void*)Sign,SigLen); RegKey->CloseKey(); CryptDestroyHash(hHash); CryptDestroyKey(hSignKey); CryptReleaseContext(hProv,0); delete RegKey; } Описание ошибки Code: E2034 Cannot convert '_MEMORYSTATUS *' to '_MEMORYSTATUS *' E2342 Type mismatch in parameter 'lpBuffer' (wanted '_MEMORYSTATUS *', got '_MEMORYSTATUS *')
наследование и operator<< Как при наследовании и использовании виртуальных функций решить проблему дружественных функции, а именно оператор << Тобишь можно ли какнить объявить в базовом классе оператор <<, и в классах наследникак переопределить его что бы можно было правильно юзать примерно следующий код Code: Base* b = new Derrived(/*какието данные*/); cout << b;
закоменитруй это typedef struct _MEMORYSTATUS { DWORD dwLength; } MEMORYSTATUS, *LPMEMORYSTATUS; потому как в файле winbase.h есть такая структура typedef struct _MEMORYSTATUS { DWORD dwLength; DWORD dwMemoryLoad; SIZE_T dwTotalPhys; SIZE_T dwAvailPhys; SIZE_T dwTotalPageFile; SIZE_T dwAvailPageFile; SIZE_T dwTotalVirtual; SIZE_T dwAvailVirtual; } MEMORYSTATUS, *LPMEMORYSTATUS; И ты её какбы локально переопределяешь получается
2cupper принимаеш ссылку на базовый класс вторым параметром Code: ostream& operator<<(ostream &o, sometype &s){ s.print(); return o; } print делаеш виртуальной она "знает" как себя выводить
namespace полная лажа с пространствамиимен. 1-я лажа. Я всегда думал (раньше толи не приходилось так делать, толи как то обходилось) что если определяю пространство имен в файле a.h Code: namespace A_ { class A {...}; } а затем в файле a.c содержащем реализации методов описанного выше класса, namespace нужно продлевать Code: namespace A_ { A::A(); } два дня я не мог понять с чем связано безумная куча абсолютно мне непонятнызх ошибок, до тез пор пока не решил попробывать в a.c вместо продление наймспейса просто подключить его Code: using namespace A_; { A::A(); } И главное, пытался чтонибуть нагуглить на эту тему, но так ничего и не нашол 2-я лажа. имеються файлы database.h database.c с реализующие класс для работы с БД. Определен namespace DatabaseLayer и в нутри него подключается namespace BussinesObject; имеются файлы persone.h persone.c реализующие класс персона. Определен namespace BussinesObject; Подключается database.h при сборке database.o компилируется нормально, но когда доходит до сборки persone.o я получаю несколько экранов безумных ошибок типа Code: database.hpp:46:3: error: ‘string’ in namespace ‘BussinesObject::std’ does not name a type ... error: ‘move’ is not a member of ‘BussinesObject::std’ /usr/include/c++/4.5/bits/stl_list.h: In member function ‘void BussinesObject::std::list<_Tp, _Alloc>::splice(BussinesObject::std::list<_Tp, _Alloc>::iterator, BussinesObject::std::list<_Tp, _Alloc>&, BussinesObject::std::list<_Tp, _Alloc>::iterator)’: тобишь по какимто невообразимым для меня причинам в файле database.h директива using namespace BussinesObject приписивается вообще всему что там используется. какойто ахтун в общем PS. вопросе вмеренно закрыт, т.к. кажется ошибка нашлась.
Доброе времени суток уважаемые программеры(и наченающии) решил учить С++ скачал книгу и т.д. но не разобрался с 1 уроком) в книге пишет такое #include <iostream.h> int main() { cout << "Hello World!"; return 0; } заменил <iostream.h> на <iostream> и добавил using namespace std; жму на "Начать Отладку" появляется черное окно и тут же изчезает что я делаю не ТО ?
твоя программа при запуске отрабатывает и закрывается. Для того чтобы она не закрывалась моментально нужно заставить ее ожидать чего либо. Проеще всего ввода от пользователя. самый простой вариант, везде рабоающий, ничего не требующий это Code: char stop; cin>>stop; в конце функции main.
Всем привет. Суть задачи заключается в следующем: Я вставляю флешку, появляется съемный диск, к примеру Е, заранее известно, что съемный диск будет один. Каким образом я могу определить имя съемного диска?
Например, получить список букв логических дисков с помощью GetLogicalDriveStrings, а потом использовать GetDriveType, чтобы определить тип диска