Помогите, пожалуйста! Только начал учить язык, учу по Страуструпу. Написал программу, по заданию, вычисляющую площадь прямоугольника и площадь в рамках. Выдаёт ошибку -"R6010-abort () has ben called. В чем проблема? Code: #include"../../../std_lib_facilities.h" using namespace std; int area(int lendth, int weidth){ if(lendth<=0||weidth<=0) error("error?"); return lendth*weidth; } int framed_area(int a, int b){ const int frame=2; return area(a-frame,b-frame); } int main (){ int x=3; int y=6; int z=8; int area1=area(x,y); int area2=framed_area(1,z); int area3=framed_area(y,z); double ratio=double(area1)/area3; cout<<area1<<endl <<area2<<endl <<area3<<endl <<ratio<<endl; system("pause"); return 0; }
возможно я чтото не понял но у меня работает вот этот код: Code: #include <iostream> using namespace std; int area(int lendth, int weidth){ if(lendth<=0||weidth<=0) cout << "error?"; return lendth*weidth; } int framed_area(int a, int b){ const int frame=2; return area(a-frame,b-frame); } int main (){ int x=3; int y=6; int z=8; int area1=area(x,y); int area2=framed_area(1,z); int area3=framed_area(y,z); double ratio=double(area1)/area3; cout<<area1<<endl <<area2<<endl <<area3<<endl <<ratio<<endl; return 0; }
в таком случае, если будут введены неправильные аргументы, то программа не остановится и вернёт не правильные результат, после чего могут возникнуть другие ошибки((((
Code: #include <iostream> using namespace std; int area(int lendth, int weidth){ if(lendth<=0||weidth<=0) cout << "error?"<<endl; return lendth*weidth; } int framed_area(int a, int b){ const int frame=2; return area(a-frame,b-frame); } int main (){ int x=3; int y=6; int z=8; int area1=area(x,y); int area2=framed_area(1,z); int area3=framed_area(y,z); double ratio=double(area1)/area3; cout<<area1<<endl <<area2<<endl <<area3<<endl <<ratio<<endl; return 0; } Собрал, запустил у меня вроде работает. Что значит может не остановиться? Какие не верные аргументы (не буквы же) 'Побегай' дебагером по ней, посмотри что куда там ложиться http://zalil.ru/upload/34639380
Проблема с многопоточностью в DLL Доброго времени суток! Проблема возникает при вызове ф-ции CreateThread, если после неё расположен цикл. Поток не стартует до завершения цикла. Выглядит это так: Code: DWORD TestThread(LPVOID lpThreadParameter) { MessageBoxA(0, "Test Thread", "Thread", 0); return 0; } void TestFunc() { DWORD ThreadId = 0; CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)TestThread, NULL, 0, &ThreadId); CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)TestThread, NULL, 0, &ThreadId); for(int i=0; i<3; i++) { Sleep(1000); } } BOOL APIENTRY DllMain( HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved ) { hDllModule = hModule; switch (ul_reason_for_call) { case DLL_PROCESS_ATTACH: TestFunc(); case DLL_THREAD_ATTACH: case DLL_THREAD_DETACH: case DLL_PROCESS_DETACH: break; } return TRUE; } Проверял возвращаемые хендлы, id потоков и GetLastError() после вызова CreateThread - всё в норме. Но появляются меседжбоксы только по прошествии 3 секунд, т.е. после завершения цикла. Следовательно при вычислениях с использованием while(true){Sleep(1000);} тело ф-ции потока не выполняется вообще. Пробовал создавать потоки с флагом CREATE_SUSPENDED а следом вызывать ResumeThread() - не помогло. Изменение приоритета потоков так же не возымело эффекта. При этом если вызвать ф-цию TestFunc() не в dll, а в exe, то всё отрабатывает предсказуемо - появляются 2 меседжбокса, а параллельно с ними крутится цикл. PS: проект 64-битный. Запускается dll стандартным вызовом LoadLibraryA()
И тут всё предсказуемо. Просто кто-то не читает документацию. http://blogs.msdn.com/b/oldnewthing/archive/2007/09/04/4731478.aspx
Туплю, выручайте Есть функция, объявленная как Code: template <class T> static vector<T> replaceRange(vector<T> src, vector<T> find, vector<T> repl); она вызывается вот так: Code: vector<int> t {0,1,2,3,4,5,6,7,8,9}; vector<int> f {3,4,5}; vector<int> r {13,14}; t=Utils::replaceRange<int>(t,f,r); на что я получаю Code: undefined reference to `std::vector<int, std::allocator<int> > Utils::replaceRange<int>(std::vector<int, std::allocator<int> >, std::vector<int, std::allocator<int> >, std::vector<int, std::allocator<int> >)' где произошла нестыковка? Хедер, разумеется, заинклудил, код функции написал. Заранее благодарен.
Используй константные ссылки, как аргументы функции: Code: template <class T> static vector<T>& replaceRange(const vector<T>& src, const vector<T>& find, const vector<T>& repl);
вопрос снят в связи с отказом от С++ в пользу C# не-а, все равно Code: undefined reference to `std::vector<int, std::allocator<int> >& Utils::replaceRange<int>(std::vector<int, std::allocator<int> > const&, std::vector<int, std::allocator<int> > const&, std::vector<int, std::allocator<int> > const&)' сама функция выглядит вот так: Code: template <class T> vector<T>& Utils::replaceRange(const vector<T>& src, const vector<T>& find, const vector<T>& repl){ int pos; while((pos=Utils::findSubvector<int>(src,find))!=-1){ src.erase(src.begin()+pos,src.begin()+pos+find.size()); src.insert(src.begin()+pos,repl.begin(),repl.end()); } return src; }
Code: #include <iostream> using namespace std; int main () { cout << "Hello, world!\n"; return 0; } В C:\Program Files\MS Visual Studio 10.0\VC\include iostream.h нету. Замена 1 строки на #include <iostream.h> не дает результатов.
Все правильно: Microsoft Visual Studio 10.0\VC\include, только дело в том что со стандарта ISO C++ 98 года файл называется iostream без расширения. Ну и отличием от .h в том что все находится в пространстве std, т.е после подключения дописываем using namespace std, дабы не писать std::cin и т.д.
Имею класс: Code: class Human { private: int age; char name[size], profession[size], gender[size]; public: Human(); void edit_age(int age1); void edit_gender(char gender1[]); void edit_name(char name1[]); void edit_profession(char profession1[]); void print_info(); }; Human person[person_count]; После объявления конструктора Human(); компилятор ругается: Code: error LNK2019: ссылка на неразрешенный внешний символ "public: __thiscall Human::Human(void)" (??0Human@@QAE@XZ) в функции "void __cdecl `dynamic initializer for 'person''(void)" (??__Eperson@@YAXXZ) MVS 2008. Подскажите пожалуйста как лечится.
это все что ты написал? я вижу только отсутствие точки входа и попытку сконструировать объект, у которого не реализован конструктор. Code: class human { public: human(); void edit_age(int age1); void edit_gender(char gender1 []); void edit_name(char name1 []); void edit_profession(char profession1 []); void print_info(); private: int age; char name[256]; char profession[256]; char gender[256]; }; human::human() { // do anything or remove fucking away if not necessary } void human::edit_age(int age1) { // do enithing } void human::edit_gender(char gender1 []) { // do enithing } void human::edit_name(char name1 []) { // do enithing } void human::edit_profession(char profession1 []) { // do enithing } void human::print_info() { // print this shit } int main() { human humans[10]; return 0; }
Привет всем. Помогите пожалуйста еще с одной проблемкой ... В общем есть базовый класс: Code: class Product { protected: char name[size]; char model[size]; int price; public: void edit_name(char name1[]); void edit_model(char model1[]); void edit_price(int price); virtual void print_info(int num) = 0; }; И есть 3 дочерних класса: Code: class sausage : public Product { private: float weight; public: void print_info(int num); void edit_weigth(float weigth1); }; class milk : public Product { private: int count_of_packets; public: void print_info(int num); void edit_count_of_packets(int count_of_packets1); }; class cookie : public Product { private: int count_of_box; public: void print_info(int num); void edit_count_of_box(int count_of_box1); }; Создаю объекты так: Code: Product *product_sausage[count_product], *product_cookie[count_product], *product_milk[count_product]; product_sausage[0] = new sausage; product_sausage[1] = new sausage; product_cookie[0] = new cookie; product_cookie[1] = new cookie; product_milk[0] = new milk; product_milk[1] = new milk; Так вот в чем вопрос собественно: как вызвать методы edit_weigth, edit_count_of_packets, edit_count_of_box у дочерних классов? Например так не получается: Code: product_milk[0]->edit_count_of_packets(5); Говорит, что метод edit_count_of_packets не является методом класса Product.
Sifon110, у тебя массивы указателей на базовый класс. Нужно привести указатель к указателю на дочерний: Code: ((milk *)product_milk[0])->edit_count_of_packets(5);
Ищу человека который может помочь с простыми задачами на C++ Возможна оплата Связь в лс или icq 55669520
Здравствуйте. Есть базовый класс: Code: class A { // }; Есть производный от него класс: Code: class B : public A { // }; ... A *mass[5]; A *buff; .... for (int i=0; i<5; i++) { mass[i] = new B; } Так вот в чем вопрос: подскажите пожалуйста, как указать указатель buff на массив указателей mass? Чтобы можно было обратится к элементам массива mass как-то так: buff[0] - например. Спасибо.