КИТА unofficial

Компьютерный => Программирование => Тема начата: Артем от Апрель 13, 2008, 10:35:22



Название: Компиляторы С/С++
Отправлено: Артем от Апрель 13, 2008, 10:35:22
Можно ли с помощью компилятора Borland C++ 3.11, скрыть в диспетчере задач WinXP процесс написанной программы ? 


Название: Компиляторы С/С++
Отправлено: EvilMax от Апрель 13, 2008, 10:41:03
Сомневаюсь. Не могу точно сказать, сможет ли нормально bcw добраться до всего нужного API Windows XP, но bc - точно не сможет. Вообще, если собираетесь собирать программу под свежие версии операционок, пользуйтесь свежими компиляторами и библиотеками.


Название: Re: Компиляторы С/С++
Отправлено: Артем от Апрель 22, 2008, 04:15:02
Установил C++ Builder 6. Ничего в настройках не менял. В проекте, который открылся автоматическм при 1-ом запуске, удалил все содержимое и написал вот такой код:
Код: (cpp)
#include <iostream.h>

void main()
  {
    cout<<"Hello"<<endl;
  }

Линкер выдает 2 ошибки:
Код: (cpp)
Unresolved external '_Form1' referenced from C:\PROGRAM FILES\BORLAND\CBUILDER6\PROJECTS\PROJECT1.OBJ 
Unresolved external 'TForm1::' referenced from C:\PROGRAM FILES\BORLAND\CBUILDER6\PROJECTS\PROJECT1.OBJ

Пробовал создать новый проект и написать тот же код, но линкер все равно ругается.

Может кто-нибудь с таким уже сталкивался ? Что это может быть ?


Название: Re: Компиляторы С/С++
Отправлено: Sochin от Апрель 22, 2008, 04:39:08
artem90

Создавай проект консольного приложения.


Название: Re: Компиляторы С/С++
Отправлено: Артем от Апрель 22, 2008, 04:49:34
Создавай проект консольного приложения.
Создавал ( Файл -> Новый -> Другое -> Мастер консоли ), но тогда 2 другие ошибки линкер выдает:
Код: (cpp)
Unresolved external '__InitVCL' referenced from C:\PROGRAM FILES\BORLAND\CBUILDER6\LIB\CP32MTI.LIB|crtlvcl
Unresolved external '__ExitVCL' referenced from C:\PROGRAM FILES\BORLAND\CBUILDER6\LIB\CP32MTI.LIB|crtlvcl



Название: Re: Компиляторы С/С++
Отправлено: vimmax от Апрель 22, 2008, 05:20:14
artem90 когда создаешь консольное приложение мастером, то оно должно сразу запуститься без ошибок. Или ты что-то исправил неправильно, или он стал криво (не знаю что там у тебя).

попробуй создать приложение мастером и ничего не исправляя запустить его.


Название: Re: Компиляторы С/С++
Отправлено: LazarusLong от Апрель 22, 2008, 05:46:14
В окно Console Wizard убери птичку Use VCL (она по умолчанию там стоит).

И еще
Файл -> Новый -> Другое -> Мастер консоли
Ты что - какую-то гадость типа русификатора на Билдер поставил? Вообще не рекомендую подобное делать. IT и русский язык дружат редко.


Название: Re: Компиляторы С/С++
Отправлено: Артем от Апрель 22, 2008, 05:58:34
В окно Console Wizard убери птичку Use VCL (она по умолчанию там стоит).
LazarusLong, спс большое! заработало !

Еще хотел спросить, на будущее: то что у меня сразу не работало (с обычным проектом) - это так и должно быть, или это с Билдером моим глюки, что только в консоли работает ?



Название: Re: Компиляторы С/С++
Отправлено: LazarusLong от Апрель 22, 2008, 06:09:59
artem90 потому что ты лихим движением руки снес имплементацию конструктора главной формы (ведь приложение у тебя создано было по умолчанию VCL-вское). Сам класс главной формы объявлен в Unit1.h потому ты его и не заметил )))

Код: (cpp)
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}


Название: Re: Компиляторы С/С++
Отправлено: Артем от Апрель 23, 2008, 06:32:49
Есть текстовый файл "C:\1.txt" :
Цитировать
1 2 3 4 5
После последнего символа (5-ки) нет пробелов и переходов на следующую строку, поэтому файл подготовлен корректно.

Код программы для вывода содержимого этого файла на экран:
Код: (cpp)
#include <iostream.h>
#include <fstream.h>
#include <iomanip.h>
#include <conio.h>

void main()
  {
    int a;
    ifstream fin("C:/1.txt");
    while(fin.good())
      {
        fin>>a;
        cout<<setw(4)<<a;
      }
    getch();
  }

Результат выполнения в компиляторах  C++ Builder 6  и  MS Visual C++ 6 :
Цитировать
   1   2   3   4   5

Результат выполнения в компиляторе Borland C++ 3.11 :
Цитировать
   1   2   3   4   5   5

ВОПРОС:   почему BC 3.11 добавляет в конце лишнюю 5-ку ?


Название: Re: Компиляторы С/С++
Отправлено: EvilMax от Апрель 23, 2008, 06:37:46
ВОПРОС:   почему BC 3.11 добавляет в конце лишнюю 5-ку ?
Потому что в BC 3.11 STL кривая... Эта фишка с потоками известная. И я на нее наступал, и другие преподаватели. Год назад Савкова показала, напомнила. В общем, не мучайся.


Название: Re: Компиляторы С/С++
Отправлено: Артем от Апрель 23, 2008, 06:39:06
Потому что в BC 3.11 STL кривая... Эта фишка с потоками известная. И я на нее наступал, и другие преподаватели.

Ну а если лабы пишем на этом компилляторе, то что ж тогда делать ?


Название: Re: Компиляторы С/С++
Отправлено: EvilMax от Апрель 23, 2008, 06:42:18
Ну а если лабы пишем на этом компилляторе, то что ж тогда делать ?
Есть такое слово workaround ;) Т.е. если баг неустраним либо не локализуется, то надо его обойти, т.е. написать программу с учётом того, что баг присутствует.

Off-Topic - помечено автором как "не соответствует обсуждаемой теме"
Понимаю, что, на самом деле, это не смешно, но в условиях наличия такой техники и наличия отсутствия лаборанта в 803 аудитории (хотя, кто-то деньги получает, и этот вопрос я подниму на кафедре, ибо какого ... ?!!) деваться, увы, некуда. 5-й Borland разве что ставить? Но не знаю, как ему будет там "житься"...


Название: Re: Компиляторы С/С++
Отправлено: Артем от Апрель 23, 2008, 06:44:34
Есть такое слово workaround  Т.е. если баг неустраним либо не локализуется, то надо его обойти, т.е. написать программу с учётом того, что баг присутствует.

спс, буду пробовать.


Название: Re: Компиляторы С/С++
Отправлено: vimmax от Апрель 24, 2008, 05:15:47
EvilMax поставьте Bloodshed Dev-C++ ))))
или gcc с оболочкой.

или Ms VC - как обычно.


Название: Re: Компиляторы С/С++
Отправлено: Артем от Май 16, 2008, 08:20:01
Подскажите пожалуйста, в чем причина такой проблемы:  при попытке запустить код на C++ Builde 6 (Console Wizard) возникает следующая ошиба: "Exception class EAccessVolation"  (см. рисунок). Сначала я думал, что где-то допустил ошибку при работе с динамической памятью. Перечитал весь код, но ошибку найти не удалось. Чтобы проверить код, решил запустить его на других компиляторах: MS Visual C++ 6 и BC 3.11 никаких ошибок НЕ выдали. Погуглил, но узнал только то, что это одна из "Ошибок времени выполнения". И вот теперь возникает вопрос: это все таки я где-то "напорол" в коде, или это какая-то особенность или глюк Билдера ? 


Название: Re: Компиляторы С/С++
Отправлено: LazarusLong от Май 16, 2008, 08:39:45
artem90, ошибка в 17-й строке.


Название: Re: Компиляторы С/С++
Отправлено: Артем от Май 16, 2008, 08:45:40
ошибка в 17-й строке.
LazarusLong, возможно, я не совсем правильно сформулировал свой вопрос. Я НЕ имел ввиду: "Найдите мне ошибку в коде", если она там все таки есть, то я найду ее сам. Я хотел просто уточнить, может ли возникать такая ошибка выполнения из-за особенностей компилятора C++ Builder 6 ? Потому что в других компиляторах код работает правильно и без ошибок.


Название: Re: Компиляторы С/С++
Отправлено: LazarusLong от Май 16, 2008, 08:54:27
artem90, EAccessViolation возникает при ошибке доступа к памяти. Не зная какой код эту ошибку сгенерировал, о причинах можно только догадываться.


Название: Re: Компиляторы С/С++
Отправлено: EvilMax от Май 16, 2008, 10:14:25
artem90, скорее всего, действительно бока в коде. Выход за границы массива, попытка запихнуть данных в строку, больше чем отведено под неё памяти (например, если не учесть 0-символ), обращение к указателю, память под который не отведена и т.п. Ищи.


Название: Re: Компиляторы С/С++
Отправлено: Артем от Июнь 24, 2008, 11:56:14
Скажите пожалуйста, поддерживает ли Borland C++ 3.11 работу с исключениями, и использование операторов try, throw, catch ?

Самому пока разобраться не удалось, потому что при вводе этих операторов они выделяются черным цветом, и якобы компилятор их понимает, но при компиляции пишет "Expression syntax". В хелпе 3.11-ого описание этих операторов также отсутствует.


Название: Re: Компиляторы С/С++
Отправлено: Артем от Июль 15, 2008, 08:49:22
Подскажите пожалуйста, как в С++ Builder 6.0 правильно создать исполняемый EXE файл, который можно было бы запускать на других компах без установленного Билдера ?

Я создал проект, потом сохранил все файлы проекта - Save All. Полсе запуска - Run, создался исполняемый файл, но я на всякий случай запустил еще Make Project и Build Project. В итоге в папке проекта оказалось 17 файлов:

  • Project1.bpr
  • Unit1.h
  • Project1.cpp
  • Unit1.cpp
  • Unit1.dfm
  • Project1.obj
  • Unit1.obj
  • Project1.res
  • Project1.exe
  • Project1.~bpr
  • Project1.~cpp
  • Unit1.~cpp
  • Unit1.~ddp
  • Unit1.~dfm
  • Unit1.~h
  • Unit1.ddp
  • Project1.tds

Но при попытке запустить эту прогу на компе без Билдера вылезла ошибка, что не был найден некий rtl60.bpl  :(


Название: Re: Компиляторы С/С++
Отправлено: EvilMax от Июль 15, 2008, 10:24:15
Но при попытке запустить эту прогу на компе без Билдера вылезла ошибка, что не был найден некий rtl60.bpl  Грустный
Вариантов два:
1. Поставляй необходимые библиотеки *.bpl вместе с программой. В частности, rtl60.bpl, ну и на что еще ругнётся.
2. Собери статически исполняемый файл. Должна быть опция или в свойствах проекта или в свойствах линкера - не помню уже БаГландовские ИДЕ под винду... Тогда все run-time библиотеки на этапе компоновки (линковки) будут встроены в exe-шник. Ну и размер его подрастёт соответственно. 5-7 метровый exe-файл с почти пустой программой в таком случае - норма =)

кажите пожалуйста, поддерживает ли Borland C++ 3.11 работу с исключениями, и использование операторов try, throw, catch ?

Самому пока разобраться не удалось, потому что при вводе этих операторов они выделяются черным цветом, и якобы компилятор их понимает, но при компиляции пишет "Expression syntax". В хелпе 3.11-ого описание этих операторов также отсутствует.
Не поддерживает. NotImplementedException  :D


Название: Re: Компиляторы С/С++
Отправлено: LazarusLong от Июль 16, 2008, 12:52:26
artem90, в общем последовательность такая:

Вкладка Project -> Project Opions -> Compiler
Жмем кнопку Release

Вкладка Project -> Project Opions -> Packages
Убираем галочку Build with run-time packages

В некоторых случаях нужно сделать еще и:
Вкладка Project -> Project Opions -> Linker

Убираем галочку Use dynamic RTL


Если это сделаешь - все нужные bpl зашьются в экзешник.

Может где-то с названиями вкладок попутал, сейчас нету установленного билдера под рукой, но думаю разберешься.

Этого достаточно, если твоя программа не использует такую гадость, как BDE


Название: Re: Компиляторы С/С++
Отправлено: Артем от Июль 16, 2008, 10:24:28
LazarusLong, спасибо большое! Помогло :)


Название: Re: Компиляторы С/С++
Отправлено: Магнетон Бора от Февраль 23, 2009, 10:42:25

Уважаемые коллеги, подскажите кто знает, я взял небольшой примерчик бинарного дерева и реализую его на VC++ 2008, в примере используется шаблонный класс вектор предназначенный для хранения любых массивов данных, но вот только VC ругается на то, что невозможно подключить заголовочный файл с прототипом данного вектора, я думаю может я неправильно написал заголовочный файл, подскажите, если кто знает, в help глянуть не могу, т.к. у меня урезанная версия VС.

Код:
#include "stdafx.h"
#include "conio.h"
#include "stdio.h"
#include "iostream.h"
#include "math.h"
#include "vector.h"

template<class T>
class BTreeNode
{

private :
T value;
BTreeNode<T> *left;
BTreeNode<T> *right;

public :

BTreeNode(void);
BTreeNode(T value);
BTreeNode(BTreeNode<T>);
~BTreeNode();

void  SetLeft(BTreeNode<T> *node) { left  = node; }
void SetRight(BTreeNode<T> *node) { right = node; }
T GetValue() { return value; }
void SetValue(T value)   { this->value = value; }
BTreeNode<T>* GetLeft()  { return left;  }
BTreeNode<T>* GetRight() { return right; }
void RemoveChild(int index);
void Traverse(vector<BTreeNode<T>*> &v, BTreeNode<T> *node);
};

template<class T>
BTreeNode<T>::BTreeNode(void)
{
left  = NULL;
right = NULL:
};

template<class T>
BTreeNode<T>::BTreeNode(T value)
{
this->value = value;
this->right = NULL;
this->left  = NULL;
};

template<class T>
BTreeNode<T>::~BTreeNode()
{
if(right) { delete right; }
if(left ) { delete left;  }
};


template<class T>
void BTreeNode<T>::Traverse(vector<BTreeNode<T>*> &v, BTreeNode<T> *node)
{
v.push_back(node);
cout<<node->GetValue()<<endl;

if(node->left)
{
Traverse(v,node->left);
};

if(node->right)
{
Traverse(v,node->right);
}
};

template<class T>
void AppendValue(BTreeNode<T> **node, T x)
{
if(! *node)
{
BTreeNode<T> *n = new BTreeNode<T>(x);
*node = n;
delete n;
}

else
{
if((*node)->GetValue > x )
{
BTreeNode<T> *left = (*node)->GetLeft();
Appendalue(&left,x);
(*node)->SetLeft(left);
}

else
{
  BTreeNode<T> *right = (*node)->GetLeft();
  Appendalue(&right,x);
  (*node)->SetRight(right);
}
}


int main(int argc, char* argv[])
{
return 0;
}


Название: Re: Компиляторы С/С++
Отправлено: tos от Февраль 23, 2009, 11:15:27
для начала #include <vector>
а ещё он в неймспейсе std
так что обращася к нему или std::vector или using namespace std; пропиши в начале


Название: Re: Компиляторы С/С++
Отправлено: ZaQ от Февраль 23, 2009, 11:28:36
Вектор уже проинклужен, хоть и в старой нотации. А ошибка скорее всего именно в нэймспейсах.


Название: Re: Компиляторы С/С++
Отправлено: Магнетон Бора от Февраль 23, 2009, 11:38:40
Блин (((( прописал using namespace std в начале, но не помогает (((((


Название: Re: Компиляторы С/С++
Отправлено: tos от Февраль 23, 2009, 11:41:53
не стоит поддержка С++ для MSVC
=) сорри, не помогу.


Название: Re: Компиляторы С/С++
Отправлено: Магнетон Бора от Февраль 23, 2009, 11:52:26
Ошибка выходит вот такая

c:\users\acer\documents\ìêèò\ëàáîðàòîðíûå ðàáîòû\lab1\btree\btree.cpp(4) : fatal error C1083: Cannot open precompiled header file: 'Debug/BTree.pch': No such file or directory
Error executing cl.exe.

Я пробывал по-разному инклудить вектор:

#include <vector.h>

#include <vector>

#include "vector"

#include "vector.h"

Все бесполезно ((((


Название: Re: Компиляторы С/С++
Отправлено: tos от Февраль 23, 2009, 11:56:07
ну инклудь для начала так #include <vector>
а ошибка у тебя в использовании precompiled header.
в опциях проекта попробуй отключить его
"don`t use precompiled header" ищи в графе "precompiled header"


Название: Re: Компиляторы С/С++
Отправлено: Магнетон Бора от Февраль 24, 2009, 12:41:41
неа все равно не получается (


Название: Re: Компиляторы С/С++
Отправлено: Артем от Февраль 24, 2009, 12:53:49
fatal error C1083: Cannot open precompiled header file: 'Debug/BTree.pch': No such file or directory
Сегодня такая же ошибка преследовала и меня :) Правда я юзал VC++ 6.0. Помогла просто пересборка проекта Build -> Rebuild All. Магнетон Бора, попробуй, может быть поможет.


Название: Re: Компиляторы С/С++
Отправлено: ZaQ от Февраль 24, 2009, 12:55:31
прекомпилед хидеры оключать надо для сппшников, а не только для проекта.


Название: Re: Компиляторы С/С++
Отправлено: tos от Февраль 24, 2009, 09:18:00
странно что CPP не наследуют от проекта настройки
и огромная просьба!
выкладывайте тексты ошибок, а не свои догадки относительно их причины, ок?


Название: Re: Компиляторы С/С++
Отправлено: ZaQ от Февраль 24, 2009, 09:59:31
Видимо не наследует, пару дней назад с этим сталкивался. Точнее отключение в проекте не работает в случае если дя этого сппшника были ранее установлены свои настройки прекомпилед хидера.


Название: Re: Компиляторы С/С++
Отправлено: tos от Февраль 24, 2009, 10:04:51
Точнее отключение в проекте не работает в случае если дя этого сппшника были ранее установлены свои настройки прекомпилед хидера.
так и есть


Название: Re: Компиляторы С/С++
Отправлено: Артем от Февраль 25, 2009, 07:23:36
Помогите плз решить такую проблему:

Юзаю VC++ 6.0. И периодически возникает ошибка линкера при попытке запустить прогу на выполнение. 
Код:
LINK : fatal error LNK1104: cannot open file "Debug/17.exe"
Приходится каждый раз копировать весь код в новый проект и там запускать. Есть ли нормальное решение этой проблемы ?

ЗЫ: удалить файл 17.exe не получается, пишет что нет доступа. А Unlocker грит что файл не занят никаким процессом.