C / C++ 10.02.2015 / 17:56 | | Ксакеп Модератор форума Сейчас: Offline
Регистрация: 20.06.2012
| |
10.02.2015 / 19:02 | | WertysORK Пользователь Сейчас: Offline
Имя: Никита Регистрация: 15.07.2014
| кто знает что это за ошибка ? fatal error LNK1120: 1 unresolved externals после компиляции кода
|
10.02.2015 / 19:07 | | Naik Пользователь Сейчас: Offline
Имя: %name% Регистрация: 14.03.2010
| WertysORK, Go back in VisualStudio, start over again, go to File -> New -> Project -> Win32 Console Application -> name your app -> click next -> click application settings.
For the application type, make sure Console Application is selected (this step is the vital step).
The main for a windows application is called WinMain, for a DLL is called DllMain, for a .NET application is called Main(cli::array ^), and a static library doesn't have a main. Only in a console app is main called main
Изменено Naik (10.02 / 19:07) (всего 1 раз) |
10.02.2015 / 19:07 | | Ксакеп Модератор форума Сейчас: Offline
Регистрация: 20.06.2012
| WertysORK, какая-то ошибка линковки (1120), могу предположить что объявил какой-то объект (функцию / переменную), но не определил её. Кидай код (в спойлер) что ли.
|
10.02.2015 / 19:14 | | WertysORK Пользователь Сейчас: Offline
Имя: Никита Регистрация: 15.07.2014
| Ксакеп, вот код , я его копировал с хабры Открыть спойлер Закрыть спойлер #include <cstring>
#define BASE 10 //система счисления
#define MIN_LENGTH_FOR_KARATSUBA 4 //числа короче умножаются квадратичным алгоритмом
typedef int digit; //взят только для разрядов числа
typedef unsigned long int size_length; //тип для длинны числа
using namespace std;
struct long_value { //тип для длинных чисел
digit *values; //массив с цифрами числа записанными в обратном порядке
size_length length; //длинна числа
};
long_value sum(long_value a, long_value b) {
/* функция для суммирования двух длинных чисел. Если суммируются числа разной длинны
* то более длинное передется в качестве первого аргумента. Возвращает новое
* ненормализованное число.
*/
long_value s;
s.length = a.length + 1;
s.values = new digit[s.length];
s.values[a.length - 1] = a.values[a.length - 1];
s.values[a.length] = 0;
for (size_length i = 0; i < b.length; ++i)
s.values[i] = a.values[i] + b.values[i];
return s;
}
long_value &sub(long_value &a, long_value b) {
/*функция для вычитания одного длинного числа из другого. Изменяет содержимое первого
* числа. Возвращает ссылку на первое число. Результат не нормализован.
*/
for (size_length i = 0; i < b.length; ++i)
a.values[i] -= b.values[i];
return a;
}
void normalize(long_value l) {
/*Нормализация числа - приведение каждого разряда в соответствие с системой счисления.
*
*/
for (size_length i = 0; i < l.length - 1; ++i) {
if (l.values[i] >= BASE) { //если число больше максимального, то организовавается перенос
digit carryover = l.values[i] / BASE;
l.values[i + 1] += carryover;
l.values[i] -= carryover * BASE;
} else if (l.values[i] < 0) { //если меньше - заем
digit carryover = (l.values[i] + 1) / BASE - 1;
l.values[i + 1] += carryover;
l.values[i] -= carryover * BASE;
}
}
}
long_value karatsuba(long_value a, long_value b) {
long_value product; //результирующее произведение
product.length = a.length + b.length;
product.values = new digit[product.length];
if (a.length < MIN_LENGTH_FOR_KARATSUBA) { //если число короче то применять наивное умножение
memset(product.values, 0, sizeof(digit) * product.length);
for (size_length i = 0; i < a.length; ++i)
for (size_length j = 0; j < b.length; ++j) {
product.values[i + j] += a.values[i] * b.values[j];
/*В случае изменения MIN_LENGTH_FOR_KARATSUBA или BASE расскоментировать следующие
* строки и подобрать соотв. значения для исключения переполнения разрядов.
* Например для десятичной системы счисления число 100, означает, что организовавается
* перенос 1 через один разряд, 200 - перенос 2 через один разрряд, 5000 - 5 через два.
* if (product.values[i + j] >= 100){
* product.values[i + j] -= 100;
* product.values[i + j + 2] += 1;
* }
*/
}
} else { //умножение методом Карацубы
long_value a_part1; //младшая часть числа a
a_part1.values = a.values;
a_part1.length = (a.length + 1) / 2;
long_value a_part2; //старшая часть числа a
a_part2.values = a.values + a_part1.length;
a_part2.length = a.length / 2;
long_value b_part1; //младшая часть числа b
b_part1.values = b.values;
b_part1.length = (b.length + 1) / 2;
long_value b_part2; //старшая часть числа b
b_part2.values = b.values + b_part1.length;
b_part2.length = b.length / 2;
long_value sum_of_a_parts = sum(a_part1, a_part2); //cумма частей числа a
normalize(sum_of_a_parts);
long_value sum_of_b_parts = sum(b_part1, b_part2); //cумма частей числа b
normalize(sum_of_b_parts);
long_value product_of_sums_of_parts = karatsuba(sum_of_a_parts, sum_of_b_parts);
// произведение сумм частей
long_value product_of_first_parts = karatsuba(a_part1, b_part1); //младший член
long_value product_of_second_parts = karatsuba(a_part2, b_part2); //старший член
long_value sum_of_middle_terms = sub(sub(product_of_sums_of_parts, product_of_first_parts), product_of_second_parts);
//нахождение суммы средних членов
/*
* Суммирование многочлена
*/
memcpy(product.values, product_of_first_parts.values,
product_of_first_parts.length * sizeof(digit));
memcpy(product.values + product_of_first_parts.length,
product_of_second_parts.values, product_of_second_parts.length
* sizeof(digit));
for (size_length i = 0; i < sum_of_middle_terms.length; ++i)
product.values[a_part1.length + i] += sum_of_middle_terms.values[i];
/*
* Зачистка
*/
delete [] sum_of_a_parts.values;
delete [] sum_of_b_parts.values;
delete [] product_of_sums_of_parts.values;
delete [] product_of_first_parts.values;
delete [] product_of_second_parts.values;
}
normalize(product); //конечная нормализация числа
return product;
}
Изменено Ксакеп (10.02 / 20:08) (всего 1 раз) |
10.02.2015 / 19:18 | | Naik Пользователь Сейчас: Offline
Имя: %name% Регистрация: 14.03.2010
| WertysORK, а маин где
|
10.02.2015 / 19:20 | | WertysORK Пользователь Сейчас: Offline
Имя: Никита Регистрация: 15.07.2014
| Naik, я дурак спасибо
|
22.02.2015 / 18:16 | | Naik Пользователь Сейчас: Offline
Имя: %name% Регистрация: 14.03.2010
| Не пойму в чем ошибка. Пишу #include <iostream>
#include <clocale>
...
setlocale(LC_ALL, "");
...
...
cout << L"Програма для перегляду текстових файлів." << endl;
А печатает 0x8048be4 |
22.02.2015 / 18:56 | | swank Пользователь Сейчас: Offline
Имя: Виталий Откуда: Киев Регистрация: 07.09.2012
| Сейчас решил всеже начать учить си, накатал вот такое, но после запуска ошибка сегментации. В чем дело? Открыть спойлер Закрыть спойлер #include <stdio.h>
#include <SDL/SDL.h>
#include <SDL/SDL_ttf.h>
SDL_Surface * screen;
SDL_Surface * background;
void DrawImage(SDL_Surface * img, int x, int y, int w, int h, int sx, int sy)
{
SDL_Rect desc;
desc.x = x;
desc.y = y;
SDL_Rect src;
src.x = sx;
src.y = sy;
src.w = w;
src.h = h;
SDL_BlitSurface(img, &src, screen, &desc);
}
void WriteText(int x, int y, char text[100], int sz, int r, int g, int b)
{
SDL_Color clr;
clr.r = r;
clr.g = g;
clr.b = b;
TTF_Font * fnt = TTF_OpenFont("font.ttf", sz);
SDL_Rect dest;
dest.x = x;
dest.y = y;
SDL_Surface * TextSurface = TTF_RenderUTF8_Blended(fnt, text, clr);
SDL_BlitSurface(TextSurface, NULL, screen, &dest);
SDL_FreeSurface(TextSurface);
TTF_CloseFont(fnt);
}
int main(int argc, char *argv[])
{
if (SDL_Init(SDL_INIT_VIDEO) < 0) {
printf( "Unable to init SDL: %s", SDL_GetError());
return 1;
}
if(TTF_Init() < 0) {
printf(" Uniable to init SDL ttf");
return 1;
}
screen = SDL_SetVideoMode(550, 420, 16, SDL_HWSURFACE | SDL_DOUBLEBUF);
if (!screen) {
printf("Can't set videomode: %s", SDL_GetError());
return 1;
}
background = SDL_LoadBMP("q.bmp");
DrawImage(background, 0, 0, 800, 480, 0, 0);
WriteText(0, 50, "Привет, как дела, Hello world", 35, 0, 0, 0);
SDL_Flip(screen);
SDL_Delay(10000);
SDL_Quit();
return 0;
}
Изменено swank (22.02 / 19:05) (всего 1 раз) |
23.02.2015 / 08:38 | | NaruTrey Пользователь Сейчас: Offline
Имя: Андрей K. Откуда: Тольятти Регистрация: 15.01.2010
| swank, у тебя TTF_OpenFont() не находит "font.ttf" и возвращает NULL, а TTF_RenderUTF8_Blended() лезет в NULL за шрифтом. Вот и получается ошибка сегментаций.
__________________
Чёрные усы кричает этот свисть Изменено NaruTrey (23.02 / 08:39) (всего 1 раз) |
Всего сообщений: 2777 Фильтровать сообщения Поиск по теме Файлы топика (111)
|