Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» Вопросы по программированию на C/С++

Автор: lungtung
Дата сообщения: 01.10.2006 12:33
помогите выяснить проблему в Visual C
--------------------------------------------------------------
шаг1: создал Win32 Console Project -> Empty project
шаг2: написал 3 файла:
--------------------------------------------------------------
[more]
// Node.h
#ifndef NODE_H
#define NODE_H

class Node
{
    int    data;
    Node*    left;
    Node*    right;
public:
    Node(int d, Node* l = NULL, Node* r = NULL);

};

#endif
------------------------------------------------------------------
// Node.cpp
#include "iostream.h"
#include "Node.h"

Node::Node(int d, Node *l, Node *r)
{
    data    =    d;
    left    =    l;
    right    =    r;

}
------------------------------------------------------------------
// test.cpp
#include "iostream.h"
#include "Node.h"

void main()
{
Node nd(3);
}
--------------------------------------------------------------------
compiling , linhking нормально работают.

--------------------------------- ПРОБЛЕМ!!!---------------------
написал 3 шаблонных файла :
--------------------------------------------------------------------
// Node.h
#ifndef NODE_H
#define NODE_H

template<class T>
class Node
{
    T    data;
    Node*    left;
    Node*    right;
public:
    Node(T d, Node* l = NULL, Node* r = NULL);

};

#endif
--------------------------------------------------------------------
// Node.cpp
#include "iostream.h"
#include "Node.h"

template<class T>
Node<T>::Node(T d, Node<T> *l, Node<T> *r)
{
    data    =    d;
    left    =    l;
    right    =    r;

}
--------------------------------------------------------------------
// test.cpp
#include "iostream.h"
#include "Node.h"

void main()
{
Node<int> nd(3);
}
------------------------------------------------------------------

compiling : нормально работает (нет ошибки)
linhking : Ошибка!!!
error LNK2001: unresolved external symbol "public: __thiscall Node<int>::Node<int>(int,class Node<int> *,class Node<int> *)" (??0?$Node@H@@QAE@HPAV0@0@Z)
fatal error LNK1120: 1 unresolved externals
Error executing xilink6.exe.

///////////////////////////////////////////////////////////////////////////////////
Я не могу выяснить эту проблему.При исползовании шаблонных файлов, почему они не свзявются?. Кто узнает, помогите!!!

[/more]
Автор: RedLord
Дата сообщения: 01.10.2006 14:59
lungtung

тело перенеси в хедер.


в node.h:

template<class T>
Node<T>::Node(T d, Node<T> *l, Node<T> *r)
{
data = d;
left = l;
right = r;

}


P.S. node.cpp - вообще убери
Автор: lungtung
Дата сообщения: 01.10.2006 18:07
верно! этот способ я уже попробовал. Даже если перед директив #endif в файле node.h дабовил строку:
---------------------------------
#ifndef NODE_H
#define NODE_H
......
.......
#include "node.cpp"
#endif
----------------------------------
результат тоже получится. Но видите! Я написал 2 варианта. Один без шаблона, один с шаблоном. Я думаю, что оба правильный синтаксис. Но результаты разные. Я хочу узнать, что чем отличаются между 2 вариантами, или что-то скрывается, который я не понял.

Автор: RedLord
Дата сообщения: 01.10.2006 22:34
lungtung

синтаксически все верно.
только шаблоны играют по своим правилам.

рассмотрим вариант с определением в срр файле

// test.cpp
#include "iostream.h"
#include "Node.h" // включается только хедер


void main()
{
Node<int> nd(3); // здесь начинается инстанцирование шаблона
// и компилятору нужно тело констуктора. а его нет.
}

если в файл Node.cpp в хвост добавить строку
template Node<int>; // принудительное инстанцирование шаблона для int. здесь выводится определение для Node<int>
то должно собраться.

вариант, когда в хедере только объявление, а в срр - определение, это то, что называется экспортом шаблонов. на данный момет, есть только один компилятор способный это съесть.
в книге Саттера "Новые сложные задачи на С++" есть целая глава посященная этому вопросу. там подробно расписано с какими сложностями во втором случая сталкивается компилятор.лучшего обяснения я не видел.
Автор: lungtung
Дата сообщения: 02.10.2006 11:43
RedLord:
Спасибо! Буду читать.
Автор: Elf23
Дата сообщения: 04.10.2006 10:35
Подскажите пожалуйста есть ли аналог ArrayList в STL или как это реализовать в ручную?
Автор: RedLord
Дата сообщения: 04.10.2006 12:52
Elf23
подозреваю что list.
Автор: Elf23
Дата сообщения: 04.10.2006 13:35
Помогите решить проблему:
у меня есть набор кубов --мне нужно разбить каждый куб на маленькие кубики и эту операцию проедлать для всех кубов .Затем нужно для опередленного куба взять координаты сооставляющих его кубиков .Как мне это сделать подскажитье пожалуста .
Заранее благодарен




Автор: Azpip
Дата сообщения: 05.10.2006 09:01
distance
Именно первое, половина плееров под дос, другая половина слишком наворочена или испульзует дополнительные дллки, а мне надо простенький пример и желательно под мфц.
Автор: TeXpert
Дата сообщения: 05.10.2006 14:25
Elf23

Цитата:
...у меня есть набор кубов --мне нужно разбить каждый куб на маленькие кубики и эту операцию проедлать для всех кубов

Ты что-то явно не по теме).
Если кубы разные, то решения не существует, насколько помню. Так что спрашивай гед-нибудь в теме по математике.
Автор: vrsoft
Дата сообщения: 09.10.2006 09:20
заходите на http://spam_detected/ - новый портал
Автор: xdude
Дата сообщения: 10.10.2006 22:29
Товарищи, кто-нибудь подскажет библиотеку под C/C++ для работы с POP3 (с поддержкой SSL/TLS) под юникс/линукс и винду? Нашел на сурсфордже libspopc, идеальный вариант, так как имеется упрощенный интерфейс, который не требует знаний протокола POP3 (каковых приобретать у меня времени просто нет), то есть, я тупо использую 4 функции: логин, получить список мэйлов, получить нужный мэйл, дисконнект. Все работает, но с gmail.com какая-то трабла: не хочет коннектиться, потому что там TLS. Может, кто-то подскажет какую-нибудь альтернативу? Заранее спасибо.
Автор: Jokerjar
Дата сообщения: 11.10.2006 01:01
Существует ли что-то вроде DRKB для Делфи, только для С++
Автор: xdude
Дата сообщения: 11.10.2006 01:59
MSDN и Microsoft Knowledge Base
Автор: d2711
Дата сообщения: 11.10.2006 09:53
Помогите решить, просто очень нужно... нереально... заранее благодарен всем за ответ. Ну вот вообщем и сама задача:
используя операторы циклов и условия, написать программу, которая будет производить - запись эелементов массива [5,5] согласно указанной в приложении А схеме. Значение элементов массива беруться от 1 до 25.


приложение А - http://www.alympiy.com.ua/DSC_00012.jpg

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

Я понимаю что нужен цикл с шагом 1, но вот как так задать, чтобы цифры вывелись именно так как в этом рисунке(матрице).нужно идти по линии по направлению стрелочки. Надеюсь все поняли что нужно в этой задачи!
Еще раз повторюсь, порсто ну очень надо, буду очень признателен....
Автор: gerrCrazzy
Дата сообщения: 11.10.2006 11:55
xdude
vmime - GPL, C++, шаблоны. Выглядит привлекательно, хотя не пробовал. Год не было релизов.
или
c-client - pure C, Apache license. Собирается VS2003
без проблем. Документация мне показалось немного невнятной, примеров нет, много думал, прежде чем хоть что-то написать . Разработчик безумен наглухо - придумал проблему 45000-го года, не обламывается использоваь макросы типа MICROSOFT_BRAIN_DAMAGE, etc. там, кстати в дистрибутиве есть тулза, в сырцах которой написано, что мол это не программа общего назначения и разработчик надеется что кто-нибудь когда-нибудь напишет таки подобную тулзу общего назначения, и вообще это типа пример как я(в смысле он) пишу программы. так вот, что делает эта тулза, я так и не понял , причем даже вдумчивый взгляд приводит только к пониманию того, что понять тут ничего невозможно

SSL/TLS присутсвуют так или иначе о обеих библиотеках.
Автор: WiseAlex
Дата сообщения: 11.10.2006 22:04
d2711

Код:
const unsigned w=5,h=5;
unsigned v[w][h];
int x=5,y=3;
int xInc=-1,yInc=1;
for(unsigned i=1;i<26;++i)
{
x+=xInc;
y+=yInc;
//проверяем граничные условия
if(y==h)
{
y=h-1;
yInc=0;
}
if(x==w)
{
x=w-1;
xInc=0;
}
//заполнение
v[x][y]=i;
//изменяем направление
if(yInc==0)
{
xInc=1;
yInc=-1
}else if(xInc==0)
{
xInc=-1;
yInc=1
}
}
Автор: Elf23
Дата сообщения: 12.10.2006 10:59
Люди хоть кто нибудь знает как конвертировать код в с++ в код с# и вообще это реально???
Автор: Ulysses4ever
Дата сообщения: 12.10.2006 15:42
Кто-нибудь может подсказать библиотеку для С++, в которой реализована арифметика в конечных полях и (менее важно, но все же) арифметика конечных сверток (типа многочленов).
Автор: Elf23
Дата сообщения: 16.10.2006 14:00
поскажите пожалуста
как динамически выделить память по массив структур
у меня что то глючит
Автор: RedLord
Дата сообщения: 16.10.2006 14:11
Elf23

видимо так:

struct AAA
{
};

AAA* p = new AAA[10]; // массив из 10 элементов AAA

delete[] p; // освобождение

вообще лучше юзать vector
Автор: DoctorLans
Дата сообщения: 16.10.2006 20:47
Добрый день всем.

Мою тему закрыли, и направили меня сюда, так что пишу тут.

Начинаю осваивать Microsoft Visual C++ 2005 Express, выбрал именно это среду разработки по причине ее бесплатности.

Пока всем нравится мне она.
Но вследствие того, что я пока не встречал в интернете книг, описывающих работу именно в этой среде, у меня возникли некоторые затруднения.

Во-первых, при нажатии на кнопку с зеленой стрелкой в верхней часте программы (Start Debugging) раньше появлялось окно в котором спрашивалось, заbuildить ли проект или нет.
Я поставил галку в нем, чтобы его отключить.

Но теперь оно сново понадобилось.
Как его вернуть на свое место?

Во-вторых, несколько даже дилетанский вопрос.
Чем отличаются пункты "compile" и "build" в программе?

В-третьих, кто-нибудь уже зарегистрировал программу?
Я читал, что Visual C++ 2005 Express совершенно бесплатно и законно можно использовать неограниченный срок при условии регистрации программы на официальном сайте.
Я нажал "register" в самой программе, меня завели на сайт - там я ввел email (*@hotmail.com) - далее зарегился, мне пришло письмо подтверждения, я тыкнул по ссылке в нему, меня перкинуло на страничку "спасибо за подтверждение email", далее просто редиректнуло на http://msdn.microsoft.com/vstudio/express/visualc/.
И что дальше?
Надо что-то куда-то вводить, чтобы закончить регистрацию?

Надеюсь на помощь (или подсказки) по данным вопросам.
Автор: EZH
Дата сообщения: 16.10.2006 21:09
DoctorLans
1. Tools > Options > Projects & Solutions > Build and Run
2. Build - компилировать абсолютно все, compile - обычно имеется ввиду компилировать только то что изменилось, либо необходимо перекомпилировать из-за зависимостей между модулями.
3. Забей ты на это, никому это не интересно, даже самой MS. Если версия Express, то так или иначе к тебе не будет претензий по лицензионности.
Автор: DoctorLans
Дата сообщения: 17.10.2006 16:34
EZH
хех, спасибо за помощь.

Улыбнула данная фраза: "никому это не интересно, даже самой MS".
Это что-то новенькое. Откуда информация?
То бишь даже без регистрации я могу использовать сей продукт, передавая его по наследству своим внукам?

Добавлено:
Еще такой вопрос.
Простенькая "hello world" программа со статической линковкой библиотека занимает аж 100 килобайт.
Сжатая UPX'ом - 50.
Все равно многовато.
Почему оно так происходит и можно ли это пофиксить?
Автор: distance
Дата сообщения: 17.10.2006 18:07
DoctorLans

Цитата:
Почему оно так происходит


Цитата:
Простенькая "hello world" программа со статической линковкой библиотека занимает аж 100 килобайт.



Цитата:
Сжатая UPX'ом - 50.

не надо его использовать.


Цитата:
Почему оно так происходит

потому что используется статическая линковка


Цитата:
можно ли это пофиксить?

можно. а вот нужно ли? или у тебя все программы не сложнее helloworld?

PS. VS2005, консольный проект.

Код:
#include "stdafx.h"

int _tmain(int argc, _TCHAR* argv[])
{
    _tprintf(_T("Hello, world!\n"));
    return 0;
}
Автор: DoctorLans
Дата сообщения: 17.10.2006 20:01
distance
UPX не надо?
Это почему же?


Цитата:
или у тебя все программы не сложнее helloworld?

Пока да.

Я так понимаю столько места занимает iostream библиотека и выход из ситуации - писать на WinAPI..
Автор: Abs62
Дата сообщения: 17.10.2006 20:20
DoctorLans

Цитата:
Почему оно так происходит и можно ли это пофиксить?

Анатомия C Run-Time, или Как сделать программу немного меньшего размера
Автор: distance
Дата сообщения: 17.10.2006 20:23
DoctorLans

Цитата:
UPX не надо?
Это почему же?

Упаковщики - ЗА и ПРОТИВ


Цитата:
Я так понимаю столько места занимает iostream библиотека и выход из ситуации - писать на WinAPI..

printf - вполне себе функция стандартной сишной библиотеки. iostream - это всяки cin/cout и иже с ними. так что можно получить маленький размер exe'шника не только через winapi. программе естесвенно потребуется динамический рантайм - зависит от версии компилятора - обычно msvсrt.dll
Автор: CrackMe
Дата сообщения: 17.10.2006 21:17
нубский вопрос: как сравнить 2 числа. Спсибо
Автор: DoctorLans
Дата сообщения: 17.10.2006 21:19
Хм, оказывается не все так просто...

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193

Предыдущая тема: не знаю как назвать тему :-)


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.