Advanced member
Статус: Не в сети Регистрация: 09.03.2004 Откуда: Кишинёв
.joker в array_format.cpp перед описанием функций нужно добавить ключевое слово export, но вот поддерживает ли его gcc это вопрос . Проще перенести весь код в array_format.h (компиляция с включением).
Срочно учить матчасть. Компоновщик не может найти тело функции вот и всё. Компилятор, встречая вызов функции, находит её прототип и полагает, что где-то есть откомпилированное определение, и создаёт ссылку, которую затем должен разрешить компоновщик. При компиляции же файла array_format.cpp компилятор не знает какие ему версии компилировать по шаблону и поэтому ничего не компилирует. В итоге компоновщик не может разрешить все ссылки. Выхода два: либо помешать определение в файл с объявлением, причём, даже если это заголовочный файл, компилятор с компоновщиком с трудом, но выкручиваются с множественными определениями (как и в случае со встраевыми функциями); либо в файле array_format.cpp произвести явное инстанцирование шаблона для нужных типов. А насчёт export, так оно на сегодняшний день, по-моему, реализованно только в одном компиляторе, и это не gcc.
Заблокирован Статус: Не в сети Регистрация: 23.01.2008 Откуда: Отовсюду
Сантей действительно, почему не использовать функцию pow(x,n)? Или стоит задача возвести в степень без функции pow?
Если так, то вот щас быстро прикинул на стареньком Borland C++ v 4.5, и всё работает нормально:
Код:
#include<iostream.h> #include<math.h> void main() { int n, y; float x, R; cout<<"Vnosim x: "; cin>>x; cout<<"\nVnosim stepen n: "; cin>>n; R = 1; if (n==0) R=1; if (n > 0) for( y=1; y<=n; y++ ) R=R*x; if (n < 0) {n=(-n); for( y=1; y<=n; y++ ) R=1/(R*x); } cout<<R; }
_________________ -I count six shots, nigger -I count two guns, nigger
Member
Статус: Не в сети Регистрация: 11.07.2005 Откуда: Бавария
]
Russian писал(а):
Сантей а не легче ли вместо этих циклов просто написать R=pow(x,n)я так понял прога в степень возводит просто
задание иакое - обойтись без этой функции.
Darth_Maul_x3 писал(а):
Сантей действительно, почему не использовать функцию pow(x,n)? Или стоит задача возвести в степень без функции pow?Если так, то вот щас быстро прикинул на стареньком Borland C++ v 4.5, и всё работает нормально:
значит проблема в самом MS Visual Studio 2005?
_________________ лучше день потерять, потом за пять минут долететь.
Пишу в консоли. Нужно получать текущую дату и время. Посдскажите как. Заранее спасибо) Добавлено спустя 12 минут, 51 секунду Кстати, вот еще вопрос: подаскажите какую-нить функцию для перехода по строкам файла, типа как в паскале "Seek(filename:string, position:integer);" Добавлено спустя 1 час, 5 минут, 57 секунд а где вообще можно взять описание всего <fstream.h> head-файла? (желательно на русском языке.)
Member
Статус: Не в сети Регистрация: 19.12.2005 Откуда: НН Фото: 69
Начинаю изучать Си. Пока мало чего получается и мне очень нужна ваша помощь. Начинаю с самого простейшего. Вот например, программа которая рисует 5 звездочек (ну а что надо же с чего-то начинать ):
Код:
#include <stdio.h> int main( ) { int i = 0; while (i<5) { i++; printf(" * \t"); } }
Теперь есть задание написать программу, которая спрашивает у юзера сколько надо нарисовать звездочек, если ничего не вводить, то программа ничего не выдаст... вот тут траблы - не работает:
Код:
#include <stdio.h> int main( ) { int i; printf("How many *?\t"); scanf("i"); do { printf(" * \t"); i++; } while (i<5); }
Комрады ткните носом че тут не так?
Спасибо!:beer:
Member
Статус: Не в сети Регистрация: 19.12.2005 Откуда: НН Фото: 69
mein Вон оно оказывается как делать то надо Спасибо огромное! Нужно сделать чтоб количество звездочек вводилось при запуске программы, т.е. чтоб было параметром программы. Во что я асилил:
Код:
#include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[], char *argp[]) { int i=0; int count=atoi(*argv); printf("count=%d", count); while (i<count) { argv++; printf("*"); } printf("\n"); }
Строкой printf("count=%d", count); смотрю какой получается count. Че-т не правильно и count всегда =0 Подскажите что не так плиз
Advanced member
Статус: Не в сети Регистрация: 09.03.2004 Откуда: Кишинёв
Provider Я бы написал так:
Код:
int main(int argc, char *argv[]) { int count, i = 0; if ( argc == 2 ) count = atoi(argv[1]); else return 0;
printf("count=%d\n", count);
while ( i < count ) { i++; printf("*"); }
return 0; }
"*argv" - это первый параметр, который обычно явдяется именем файла(команды) который был запущен. Стучаться к нему лучше через argv[0] . Но в данном случае нас интересует второй параметр(argv[1]). И чтобы программа работала его нужно обязательно передавать . Надёжный способ это делать - запускать программу пальцами из консоли с передачей параметров. Одинаково и для win и для lin.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения