Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Ошибка Unresolved в С++


Автор: Guest_automax 20.2.2003, 02:16
Здравствуйте!


При попытке создать программу (build), VC++ выдает ошибки:

Linking...
main.obj : error LNK2001: unresolved external symbol "void __cdecl rkt4(float,float,float *,void (__cdecl*)(float,float *,float *))" (?rkt4@@YAXMMPAMP6AXM00@Z@Z)
main.obj : error LNK2001: unresolved external symbol "void __cdecl init_rk(int,float * *)" (?init_rk@@YAXHPAPAM@Z)
Debug/prog.exe : fatal error LNK1120: 2 unresolved externals
Error executing link.exe.

prog.exe - 3 error(s), 0 warning(s)

Обе функции вызывающие ошибки объявлены в h файле rgkt4.h:

#ifndef _RGKT_
#define _RGKT_
typedef void (*mdl)(float t, float* py, float* py1);
void init_rk(int N, float* *py);
void rkt4(float t, float dt, float* py, mdl model);
#endif

Я их использую в файле main.cpp.

Объясните пожалуйста, в чем проблема.

P.S. Кстати эта же ошибка появляется всякий раз, как в программу включаются библиотеки, написанные не в данном проекте.

Автор: Fantasist 20.2.2003, 02:22
Так надо же подключить библиотеки, в которых данные функции реализованны.

Автор: automax 20.2.2003, 07:28
И как это сделать?

Автор: Vaulter 20.2.2003, 07:45
лезь в настройки проекта. там в линковщика. там длинная строчка с .lib'ами. вот там и прописывай.

Автор: automax 20.2.2003, 08:56
И что так каждый *.cpp файл нужно прописывать в настройках линковщика, ведь у меня есть исходник.

Объясните пожалуйста подробнее.

Автор: Vaulter 20.2.2003, 09:23
automax нет. только внешние функции. дел в том, что .h файл сам по себе не содержит функции, он содержит лишь описание. а сама фун-я либо в cpp либо в .dll. так вот чтобы линкер узнал что где она в dll используются .lib файлы.

Автор: automax 20.2.2003, 14:56
Все это я прекрасно понимаю. В этом вся и проблема: У меня есть и заголовочный файл h и исходный файл cpp.

Вот мои дейстсвия:
1) Кидаю их в папку проекта
2)И там где мне нужно их использовать включаю h файл

Но при попытке сделать build поялвляются ошибки (см. выше).

Что я не правильно делаю?

Автор: automax 21.2.2003, 03:29
Поднимаю тему

Автор: dim 21.2.2003, 03:48
Так ведь если есть cpp файл его не только надо кинуть в папку проекта, а и подключить чтобы .obj файл скомпилился, а из него линкер вытянет нужные имена.

Автор: automax 21.2.2003, 08:09
В смысле подсоединить к проекту, добавляя к исходникам?
Это я делаю, но это также не помогает.

Автор: Vaulter 21.2.2003, 10:08
automax да! добавить в проект нада! и .h и .cpp

Автор: automax 21.2.2003, 16:07
Еще раз повторяю: все добавлено и h и cpp, но VC++ игнорирует и все выдает ошибки.

Автор: automax 21.2.2003, 20:23
Ошибки исчезли после добавления к файлу main.cpp строчки
#include "rgkt4.c"

То есть пришлось добавить не только заголовочный файл, но и реализацию.

Скажите пожалуйста, действительно ли так надо делать каждый раз?

Может кто-нибудь посмотрит проект, он весит всего 30Кб.

Автор: Vaulter 21.2.2003, 23:38
automax кинь на мыло если время будет. посмотрю и объясню тогда все.

Автор: automax 22.2.2003, 09:16
Vaulter пытаюсь послать тебе на E-Mail проект, но письмо возвращается. Ты правильно указал адрес?

Автор: Vaulter 22.2.2003, 11:35
automax извини, вроде да

Автор: Vaulter 23.2.2003, 06:37
automax ну че? почту получил? как там? траблов нет?

Автор: automax 23.2.2003, 06:46
Да все получилось когда сделал, что сказал vaulter. А именно:

Я удалил из проекта все не важные файлы, оставил только .cpp .h .dsp и .dsw. закомпилил - ПАШЕТ!!! во всяком случае релизнул ;) чето короче было гдето прописано не то, вот он и не находил.


Хорошо что работает, но мне так и не понятно в чем проблема. Кто-нибудь знает что за файл stdafx.h. Есть идея что если прописывать в нем, то все получится, но при пустом проекте он автоматически не создается. Что нужно его самому писать? Тогда возникает вопрос что там писать?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)