Помощь - Поиск - Пользователи - Календарь
Полная версия: Ряд вопрсов по C++.
Форум «Всё о Паскале» > Delphi, Assembler и другие языки. > Другие языки
Страницы: 1, 2
volvo
Цитата
почему все так?(
Потому что:
	int cout(0); // <--- cout здесь - это int
...
cout << endl << "Вектор:" << endl; // Что бы ЭТО значило ???

compiler
Цитата(volvo @ 17.06.2008 15:05) *
Потому что:
спасибо, дкрацкое название выбрал дя переменной.. может буду теперь писать std::cout)
Вофka
c++
Помогите пожалуйсто!
Нужно решение двух задач для зачета:
1Матрица:
Получить целочисленную квадратную матрицу порядка 7, элементами которой являются числа 1, 2, ..., n, расположенные в ней по спирали.
2Рекурсия:
Пусть
x(1)=y(1)=1;x(i)=x(i-1)+y(i-1)/i^2;
y(i)=y(i-1)+x(i-1)/i,i=2,3,...
Получить x(n),y(m), если n, m -натуральные.
Зарание спасибо
renesko1
вопрос № n ;
Как подключить свой модуль к програме ?
klem4
файл положи в папку с основным cpp файлом и
 #include "myfile.h"; 


например ...
renesko1
У меня вопрос, как сделать это с шаблонам ?

Что бы качестве параметров класс принимал любой класс, где определена операция вывода. Где идет проверка времени компиляции, что инстанцируемый класс имеет необходимую функцию ( чтоб избежать непонятных сообщений компилятора при попытке иснтанцировать левый класс) .

Мне не нужен код, а какой нибудь пример на заданную тему ...


#include <string>
#include <iostream>
#include <fstream>
#include<memory>
using namespace std ;
//******************************************************************
class base {
public :
virtual void print () = 0 ;
} ;
//***************************************************************

class printmonitor : public base {
string outString ;

public :
printmonitor (const string& userString) {outString = userString;}
void print () {cout << outString ;}
~printmonitor () ;
} ;
//***************************************************************

class printinfile : public base {
string outString ;

public :
printinfile (const string& userString ) {outString = userString ;}
void print () ;
~printinfile() ;
} ;

//***************************************************************

void printinfile::print () {


ofstream out("outfile.txt",ios::out) ;
if(!out) {cout <<"Cannot open file test for writing " << endl ; }
out << outString ;
out.close () ;
}
//***************************************************************
int main()
{

//pprintmonitor = new printmonitor("test my program 1");
//pprintinfile = new printinfile("test my program 2");
auto_ptr<base> pprintmonitor (new printmonitor("test my program 1")) ;
auto_ptr<base> pprintinfile (new printinfile("test my program 2")) ;
pprintmonitor->print();
pprintinfile->print();

//delete pprintmonitor;
//delete pprintinfile ;

return 0 ;
}

renesko1
Ладно более конкретный вопрос..
"класс имеет необходимую функцию " - те функцию print() или перегруженный оператор << ?
"идет проверка времени компиляции" - как она осуществляется , ну или что это такое ?
volvo
cool.gif
#include <iostream>
// для VC придется добавить еще и <assert.h>

using namespace std;

class myA {
public:
void Print() {
cout << "first Print()" << endl;
}
};

class myB {
public:
void Print() {
cout << "second Print()" << endl;
}
};

class myC {
public:
void Oops() {
;
}
};


template<class T>
class TBase
{
bool ValidateRequirements()
{
void (T::*test)() = &T::Print;
test;
return true;
}

public:
~TBase()
{
assert( ValidateRequirements() );
}

// ...
};


int main() {
TBase<myA> first; // Ok
TBase<myB> second; // Ok
TBase<myC> third; // ha-ha : )

return 0;
}



Вот такое сообщение:
Цитата
error: `Print' is not a member of `myC'

достаточно информативно?
renesko1
smile.gif Как всегда помог, спасибо, а то у меня уже всё кипеть начинало, до меня просто суть задания не правильно дошла. Всмысле отказатся от иерархии и сделать через шаблоны, а я, как дурак, хотел совместить.
renesko1
mingw.
У меня вопрос: есть ли встроенная графическая библиотека, мне достаточно вывода линий, кругоd и тд, те.
примерно как модуль graph в pascale.
volvo
Простого встроенного - нет. Есть эмуляторы BGI: Borland BGI Graphics emulation , есть OpenGL + GLUT, есть WinAPI...
renesko1
Спасибо за ссылку, всё работает).
renesko1
Хм.. Я добавил graphics.h и winbgim.h и в ...\mingw\include.
А libbgi.a в ...\mingw\lib.


#include <graphics.h>

int main() {
int graphdriver = VGA ;
int graphmode = VGAHI;

initgraph (&graphdriver, &graphmode, "");

//line (500,350,200,300);
//closegraph();
return 0;
}




При попытке скомпилировать это получаю следующие :
D:\msys\1.0\mingw\bin>c++ asd.cpp
C:\DOCUME~1\ROCKET~1\LOCALS~1\Temp/cc8udaaa.o:asd.cpp:(.text+0x14c): undefined r
eference to `initgraph'
collect2: ld returned 1 exit status

В чём моя ошибка ?
volvo
Цитата
Я добавил graphics.h и winbgim.h и в ...\mingw\include.
А libbgi.a в ...\mingw\lib.
Ну, скопировать-то ты скопировал файлы. А добавить к проекту библиотеки не забыл? Добавляешь libbgi.a, она тянет за собой еще 5 бмблиотек: libgdi32.a, libole32.a, libolepro32.a, libuuid.32.a и libcomdlg32.a

Вот когда все это добавишь, программа откомпилируется и слинкуется. Работоспособность не проверял.
renesko1
Нескромный и глупый вопрос, где можно взять эти библиотеки?
Заранее спасибо.
volvo
А что, в папке \lib у тебя их нет? Значит, у тебя "неправильный мед" (С), в смысле, неполная установка MinGW... В моей есть все выше перечисленное.
renesko1
Эти библиотеки и в правду есть, но что то я страшно туплю: как их добавить в проект ?
Те. как я понимаю, мне надо знать какие у них заглавочные файлы или ...?
volvo
Ты чем компилируешь? Из командной строки? Значит, в эту самую строку при вызове линкера добавь
-llibbgi -llibgdi32 -llibole32 -llibolepro32 -llibuuid -llibcomdlg32
, чтобы линкер мог слинковать твой проект со всеми этими библиотеками...

Я пользуюсь Code::Blocks, там все добавляется через меню Project -> Build Options -> Linker Settings -> Add
renesko1
Код

D:\msys\1.0\mingw\bin>g++ asd.cpp  -llibbgi -llibgdi32 -llibole32 -llibolepro32
-llibuuid -llibcomdlg32
..\lib\gcc\mingw32\3.4.5\..\..\..\..\mingw32\bin\ld.exe: cannot find -llibbgi
collect2: ld returned 1 exit status

libbgi - лежит в ...\mingw\lib.
Хм... Где моя ошибка?
volvo
Очень похоже на то, что у тебя PATH не содержит пути к MinGW. Тогда что-то типа:
Код
D:\msys\1.0\mingw\bin>g++ -o main asd.cpp "D:\msys\1.0\mingw\lib\libbgi.a" "D:\msys\1.0\mingw\lib\libgdi32.a" "D:\msys\1.0\mingw\lib\libole32.a" "D:\msys\1.0\mingw\lib\libolepro32.a" "D:\msys\1.0\mingw\lib\libuuid.a" "D:\msys\1.0\mingw\lib\libcomdlg32.a"
должно сработать.
renesko1
А можно дописать пути path к mingw ?
renesko1
Всё я скачал code::blocks добавил библиотеки и всё стало воистину хорошо.
Что то я вчера тормозил, ещё раз спасибо volovo )
renesko1
Можно ли и как перегрузить операцию индексирования (в матрице)[][] ? Мне нужен обьвление функции.
Заранее спасибо.
volvo
Описание матрицы приведи, чтоб было понятно, чего именно ты хочешь... В общем случае - используй proxy-классы.
renesko1


template<class T>
class matrix {
private :
vector<T>* data ;
int len, wid ;
public :
matrix (int l, int w);
matrix (const matrix& rhs);

int getLen () const {return len ;};
int getWid () const {return wid ;};

T& ind (int index1, int index2) ; // <-----------
const T& ind (const int& index1, const int& index2) const; //<--------------Заменить на оператор индексации

};



Я представляю матрицу через вектор. Мне так, допустим, хочется ). Как надо сделать ?
volvo
Ну, раз хочется... smile.gif

Вот так, к примеру:

template <class T>
class matrix {

private:
class proxy {
vector<T> *p_data;
int p_x;

public:
void init(vector<T>* ptr) {
p_data = ptr;
}
proxy& operator() (int x) {
p_x = x;
return *this;
}
T& operator [] (int y) {
return p_data[p_x][y];
}

};

protected:
int len, wid;

vector<T> *data;
mutable proxy pproxy; // <--- не забудь

public :
// собственно, вот и индексация...
proxy& operator[] (int x) {
return pproxy(x);
}

matrix (int l, int w) {
// здесь инициализация data

pproxy.init(data); // <--- !!!
}

// дальше - все твои определения, что и было...
// только правильно выдели память под vector-ы, reserve не забудь
};


// вызывать вот так:
int main() {
matrix<int> mx(5, 5);

mx[1][2] = 3;
mx[3][1] = 7;

cout << mx[1][2] << endl;
cout << mx[3][1] << endl;

return 0;
}
renesko1
Спасибо... Просто, я решил змейку сделать на С++, заодно набить руку шаблонами, классами и прочими интерессными вещами.
renesko1
1 вопрос: как в с++ заменить следующую конструкцию


if keypressed then
begin
key := readkey ;
case ord(key) of
1 :
2 :
...



заранее спасибо.


volvo
И что эта конструкция делает на Паскале? Какие кнопки отлавливает?

В общем виде - вот так:
    int key;
if(kbhit()) {
switch(key = getch()) {
case '1': // нажата '1'
// обрабатываем
break;
case '2':
// обрабатываем
break;
}
}

renesko1
Хм... А если я хочу отловить нажатие курсорных клавиш ?

Добавлено через 15 мин.
И ещё 1 вопрос .
Как сделать задержку (delay()-pas) ?
volvo
Цитата
А если я хочу отловить нажатие курсорных клавиш ?

Ну, так лови:
    int key;
if(kbhit()) {
if(!(key = getch())) {
switch(getch()) {
case 72: // нажата "вверх"
break;
case 80: // нажата "вниз"
break;
}
}
else {
switch(key) {
// нерасширенные символы
...
}
}
}



Цитата
Как сделать задержку
В graphics.h (в том, на который я приводил ссылку выше) есть функция delay()
renesko1
Спасибо good.gif
guf
Добрый вечер. Есть вопросик. Как перевести DWORD в CString? В переменной DWORD хранится IP адрес.
volvo
Как-нибудь вот так
CString get_str(DWORD ip)
{
unsigned char first = (ip >> 24) & 0xFF;
unsigned char second = (ip >> 16) & 0xFF;
unsigned char third = (ip >> 8) & 0xFF;
unsigned char fourth = ip & 0xFF;

CString s;
s.Format (L"%u.%u.%u.%u", first, second, third, fourth);
return s;
}
?
guf
Использую компонент IP Addres Control. Ввожу IP, например 127.0.0.1. Почему-то при дебаге 0.0.0.0 выдает когда ставлю тоску останова.

и еще:
s.Format (L"%u.%u.%u.%u", first, second, third, fourth);
заменил на:
s.Format ("%u.%u.%u.%u", first, second, third, fourth);

выдает ошибку у меня, в свойствах проекта Character Set стоит как Use Multi-Byte Character Set
может из-за L перед "%u.%u.%u.%u" ?
volvo
А вот тут я тебе ничем помочь не смогу - я не пользуюсь компилятором от MS, тем более тем, чего нет в Стандарте языка (просто знаю, что в CString есть метод Format, и представляю, для чего он нужен). Если бы был обычный std::string, то можно было бы проверить на любом другом компиляторе, а так... У меня конечно есть VC Express Edition, однако MFC он не поддерживает.
guf
Все равно спасибо! Буду пробовать!
blackhard
Неподскажите где можно почитать про тип TCHAR (его структуру) нашед статью в MSDNе ms-help://MS.VSCC.v80/MS.MSDN.v80/MS.ENTSERV.v10.en/mapi/html/34762d86-22bc-4dad-82e5-e30203b7771e.htm
и насколько я понял это для того чтоб можно было работать и с ANSI кодировкой и с UNICODE в 1м типе?Может кто может разъяснить поподробнее...........
volvo
На самом деле никакой структуры этот тип не имеет, это просто синоним:

#ifdef UNICODE
typedef WCHAR TCHAR;
#else
typedef char TCHAR;
#endif

(таким образом, в Юникодных проектах под TCHAR подразумевается WCHAR, а в не-Юникодных - простой char...)
blackhard
Цитата(volvo @ 25.09.2008 20:53) *

На самом деле никакой структуры этот тип не имеет, это просто синоним:

#ifdef UNICODE
typedef WCHAR TCHAR;
#else
typedef char TCHAR;
#endif

(таким образом, в Юникодных проектах под TCHAR подразумевается WCHAR, а в не-Юникодных - простой char...)

Спасибо большое smile.gif !
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.