Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.07.2008, 18:57   #1
Prestigio
Пользователь
 
Регистрация: 21.01.2008
Сообщений: 10
Вопрос unresolved external symbol

Вычитал по этому поводу много всего интересного. Говорили, что это из-за каких-то *.lib, которых нет, но они должны быть; говорили, что это из-за неправильного объявления класса, которого у меня тоже нет. говорили много всего, чего у меня нет. Как от этого избавиться - без понятия. прошу помощи. программа всего-то считываем данные из файла в динамический массив.
Код:
//main.cpp
#include "header.h"
int main()
{
 face* faces;
 long faces_count;
 readmesh();
 return 0;
}
Код:
//header.h
struct virt
{
 float x,y,z;
 int u,v;
};
struct face
{
 virt virtex[3];
 short material_id;
};
extern int readmesh();
extern face * faces;
extern long faces_count;
Код:
//readmeshfile.cpp
#include<fstream>
#include<iostream>
#include "header.h"
int readmesh()
{
 using namespace std;
 ifstream meshfile;
 meshfile.open("mesh.rmm", ios::in | ios::binary);
 char meshfileheader[3];
 meshfile.read((char*)meshfileheader,3);
 if (strcmp(meshfileheader,"rmm")==0)
 {
  cout<<"mesh file is incorrect\n";
  return -1;
 }
 meshfile.read((char*)&faces_count,4);
 faces=new face[faces_count];
 for (long x=0; x<faces_count; x++)
 {
  meshfile.read((char*)&faces[x].virtex[0].x,4);
  meshfile.read((char*)&faces[x].virtex[0].y,4);
  meshfile.read((char*)&faces[x].virtex[0].z,4);
  meshfile.read((char*)&faces[x].virtex[0].u,4);
  meshfile.read((char*)&faces[x].virtex[0].v,4);

  meshfile.read((char*)&faces[x].virtex[1].x,4);
  meshfile.read((char*)&faces[x].virtex[1].y,4);
  meshfile.read((char*)&faces[x].virtex[1].z,4);
  meshfile.read((char*)&faces[x].virtex[1].u,4);
  meshfile.read((char*)&faces[x].virtex[1].v,4);
 
  meshfile.read((char*)&faces[x].virtex[2].x,4);
  meshfile.read((char*)&faces[x].virtex[2].y,4);
  meshfile.read((char*)&faces[x].virtex[2].z,4);
  meshfile.read((char*)&faces[x].virtex[2].u,4);
  meshfile.read((char*)&faces[x].virtex[2].v,4);

  meshfile.read((char*)&faces[x].material_id,2);
 }
 return 0;
}
Цитата:
readmeshfile.obj : error LNK2001: unresolved external symbol "struct face * faces" (?faces@@3PAUface@@A)
readmeshfile.obj : error LNK2001: unresolved external symbol "long faces_count" (?faces_count@@3JA)

Последний раз редактировалось Prestigio; 27.07.2008 в 19:00.
Prestigio вне форума Ответить с цитированием
Старый 27.07.2008, 20:16   #2
filosof_x86
...
Форумчанин
 
Аватар для filosof_x86
 
Регистрация: 01.06.2008
Сообщений: 134
По умолчанию

unresolved external symbol означает, что нигде линковщик не может найти определение чего-либо до первой попытки его использования. В данном случае, вы с помощью extern объявляете faces, faces_count и, следовательно, они должны где-то существовать глобально, а не локально в какой-нибудь функции. Вынесите определение faces, faces_count за пределы main().

И немного блиц-критики по коду:
1) Не пугайтесь использовать std::vector для динамических массивов. Вот например, вы выделили память, а убрать ее забыли (где delete[] ?).
2) Не скупитесь на строковые отступы. Один большой комок кода – не гуд.
3) Содержимое заголовочных файлов хорошо оборачивать в
Код:
//name_of_header.h   
#ifndef NAME_OF_HEADER_H
#define NAME_OF_HEADER_H
// ...
#endif
Для предотвращения повторного определения.
4) Глобальные данные – не гуд.
5) Зачем подключать все пространство имен std, если из него нужно всего пару деталей? Подключайте то, что вам нужно. Вы же не будете скупать весь магазин, а купите только то, что будете есть.
filosof_x86 вне форума Ответить с цитированием
Старый 28.07.2008, 07:12   #3
Prestigio
Пользователь
 
Регистрация: 21.01.2008
Сообщений: 10
По умолчанию

до std::vector ещё руки не дошли. как он работает не знаю. только учусь. всё остальное учту. спасибо.
Prestigio вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Программирование под Windows (ошибка), как избежать ошибки Unresolved external '_main' referenced fro DeLure Общие вопросы C/C++ 2 02.03.2008 01:35