Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

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

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


Донат для форума - использовать для поднятия настроения себе и модераторам

А ещё здесь можно купить рекламу за 25 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru

Ответ
 
Опции темы
Старый 30.11.2011, 08:35   #51
halcyon
crafter
Форумчанин
 
Аватар для halcyon
 
Регистрация: 03.09.2011
Адрес: Рашка. UTC+8
Сообщений: 127
Репутация: 34
По умолчанию

Создание указателей на функцию и fatal error LNK1120: 1 unresolved externals, подскажите, пожалуйста, в чем проблема? Не первый раз сталкиваюсь с этой ошибкой, на каком-то форуме нашел объяснение, что это ошибка возникает, когда "компилятор пытается скомпилировать пустоту или отсутствует функция main", но путнего совета никто не дал.

Код:
#include <iostream>

using namespace std;

void Square(int&, int&);
void Cube(int&, int&);
void Swap(int&, int&);
void GetVals(int&, int&);
void PrintVals(int, int);

int main()
	{
		void (*pFunc) (int&, int&);
		bool fQuit = false;
		int valOne = 1, valTwo = 2;
		int choice;
		while(fQuit==false)
			{
				cout<<"(1)Change values (2)Square (3)Cube (4)Swap (5)Quit:";
				cin>>choice;

					switch(choice)
						{
							case 1:
								pFunc = GetVals;
								break;
							case 2:
								pFunc = Square;
								break;
							case 3:
								pFunc = Cube;
								break;
							case 4:
								pFunc = Swap;
								break;
							case 5:
								fQuit = true;
								break;
						}
					if(fQuit)
						break;

					PrintVals(valOne, valTwo);
					pFunc(valOne,  valTwo);
					PrintVals(valOne, valTwo);
			}

		system("pause");
		return 0;
	}

void PrintVals(int x, int y)
	{
		cout<<"x = "<<x<<"y = "<<y<< endl;
	}

void Square(int &rX, int rY)
	{
		rX *= rX;
		rY *= rY;
	}

void  Cube(int &rX, int &rY)
	{
		int tmp;

		tmp = rX;
		rX *= rX;
		rY = rY * tmp;
	}

void Swap(int &rX, int &rY)
	{
		int temp;

		temp = rX;
		rX = rY;
		rY = temp;
	}

void GetVals(int &rValOne, int &rValTwo)
	{
		cout<<"Enter a new value of ValOne: ";
		cin>>rValOne;
		cout<<"Enter a new value of ValTwo: ";
		cin>>rValTwo;
	}
halcyon вне форума   Ответить с цитированием
Старый 30.11.2011, 10:14   #52
_Ч_
Форумчанин
 
Регистрация: 07.01.2010
Сообщений: 141
Репутация: 25
По умолчанию

линкер не может найти код от ф-ии

Код:
void Square(int&, int&); // это объявление
а вот "её" определение
Код:
void Square(int &rX, int rY) // второй аргумент не по ссылке, а по значению.
{
  rX *= rX;
  rY *= rY;
}
в точке вызова Square компилятор знает о ф-ии Square с ссылками, потому что она объявлена. Он создает объектник и в нем прописывает инфу, чтобы в нужном месте подставился вызов этой ф-ии с ссылками. А такой ф-ии в объектниках нет, потому что определена ф-ия с другой сигнатурой. Поэтому он и говорит, что не может зарезолвить то, что ему нужно. В сигнатуру входит как полное имя ф-ии и все типы ее аргументов (порядок аргументов имеет значение).
Ошибки unresolved externals обычно более подробные и из них можно вычитать инфу о том, что же не хватает линкеру и в каком месте это что-то пытаются использовать (место использования может быть указано с точностью до ф-ии. зависит от линкера). Их надо внимательно смотреть, потому что они плохо читаемы, но все же читаемы.

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

Последний раз редактировалось _Ч_; 30.11.2011 в 10:24.
_Ч_ вне форума   Ответить с цитированием
Старый 30.11.2011, 11:00   #53
halcyon
crafter
Форумчанин
 
Аватар для halcyon
 
Регистрация: 03.09.2011
Адрес: Рашка. UTC+8
Сообщений: 127
Репутация: 34
По умолчанию

_Ч_, спасибо Вам огромное
halcyon вне форума   Ответить с цитированием
Старый 30.11.2011, 17:35   #54
Mett_95
Новичок
 
Регистрация: 30.11.2011
Сообщений: 1
Репутация: 10
По умолчанию

не знаю в какую тему писать, поэтому решил сюда.
как перегнать из формата "b" в "с"?
Mett_95 вне форума   Ответить с цитированием
Старый 04.12.2011, 04:43   #55
sanek-litvin
Новичок
 
Регистрация: 04.12.2011
Сообщений: 1
Репутация: 10
По умолчанию

Доброго времени суток! Мой вопрос покажется смешным но все когда то с этого начинали =))
Купил книгу Т.А. Павловская "С/С++ Программирование на языке высокого уровня"
начал читать появились примеры. установил Borland C++Builder 6 и Microsoft Visual Studio 2010, но не полностью могу разобраться в самом по =((( Где удобнее будет запускать консольные маленькие программки по типу "Hello world". и как запускать их, проверить на работоспособность??
sanek-litvin вне форума   Ответить с цитированием
Старый 04.12.2011, 13:53   #56
Roof
Участник клуба
 
Аватар для Roof
 
Регистрация: 01.02.2007
Адрес: Планета Вулкан
Сообщений: 785
Репутация: 161

icq: 364817748
По умолчанию

Вводишь в google
как создать консольное приложение vs
И на первой же странице я нашел пошаговую инструкцию.
__________________
Изо всей благодати
В руках крепко сжатых
Я донесу только капли
Roof вне форума   Ответить с цитированием
Старый 04.12.2011, 14:10   #57
_Ч_
Форумчанин
 
Регистрация: 07.01.2010
Сообщений: 141
Репутация: 25
По умолчанию

любая IDE должна справится с такое задачкой, как написание маленьких консольных приложений. Тут наверно все равно, какую юзать. Нужно другие факторы рассмотреть. Что используется в вашем Вузе\школе, что более востребованно на рынке и прочее.
_Ч_ вне форума   Ответить с цитированием
Старый 03.01.2012, 19:04   #58
halcyon
crafter
Форумчанин
 
Аватар для halcyon
 
Регистрация: 03.09.2011
Адрес: Рашка. UTC+8
Сообщений: 127
Репутация: 34
Печаль

Помогите, пожалуйста, разобраться с рекурсивной функцией.
Код:
void qs(char *items, int left, int right)
	{
		int i, j;
		char x, y;

		i = left; j = right;
		x = items[(left+right) / 2];
		
		do
			{
				while((items[i] < x) && (i < right)) i++;
				while((x < items[j]) && (j > left)) j--;

				if(i <= j)
					{
						y = items[i];
						items[i] = items[j];
						items[j] = y;
						i++; j--;
					}
			} while(i <= j);

			if(left < j) qs(items, left, j);
			if(i < right) qs(items, i, right);
	}
Непонятки возникают с самого начала, когда в функцию передали указатель на первый элемент массива (*items), почему в дальнейшем, при присвоении символьной X он не разыменовывается? ведь items это по сути указатель на первый элемент массива..
И конечно, что еще ужаснее запутывает извилины это сама рекурсия qs(items, left, j)...
halcyon вне форума   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Первые шаги в Perl Phantom Perl 8 17.08.2018 19:18
Первые шаги к программированию ? DoobaLoop Свободное общение 5 03.10.2011 14:13
первые шаги в с++ ploik Общие вопросы C/C++ 2 16.07.2010 23:35
Первые шаги trave1er Общие вопросы C/C++ 2 10.09.2008 20:32
Первые шаги в VBA :) rustam_colpal Microsoft Office Excel 12 30.05.2008 09:27


03:05.


Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.