Часовой пояс: UTC + 3 часа




Начать новую тему Новая тема / Ответить на тему Ответить  Сообщений: 1730 • Страница 48 из 87<  1 ... 45  46  47  48  49  50  51 ... 87  >
  Пред. тема | След. тема 
В случае проблем с отображением форума, отключите блокировщик рекламы
Автор Сообщение
 

Member
Статус: Не в сети
Регистрация: 21.01.2004
Откуда: ядерная помойка
.joker писал(а):
пишу шаблон функции, компилятор gcc (mingw), получаю ошибку

есть предположение, что в у линковщика неправильный порядок файлов в коммандной строке.

_________________
memento mori



Партнер
 

Member
Статус: Не в сети
Регистрация: 12.07.2006
Откуда: Kiev
ядерный отход так прикол в том, что это происходить только с шаблонными ф-циями, с обычними таких проблем нет)

_________________
документация документации рознь


 

Advanced member
Статус: Не в сети
Регистрация: 09.03.2004
Откуда: Кишинёв
.joker в array_format.cpp перед описанием функций нужно добавить ключевое слово export, но вот поддерживает ли его gcc это вопрос :) . Проще перенести весь код в array_format.h (компиляция с включением).


 

Member
Статус: Не в сети
Регистрация: 21.01.2004
Откуда: ядерная помойка
mein
видимо, да.
gcc не поддерживает.

_________________
memento mori


 

Member
Статус: Не в сети
Регистрация: 02.02.2008
Откуда: Ростов-на-Дону
Фото: 3
.joker писал(а):
пишу шаблон функции, компилятор gcc (mingw), получаю ошибку

Срочно учить матчасть. Компоновщик не может найти тело функции вот и всё. Компилятор, встречая вызов функции, находит её прототип и полагает, что где-то есть откомпилированное определение, и создаёт ссылку, которую затем должен разрешить компоновщик. При компиляции же файла array_format.cpp компилятор не знает какие ему версии компилировать по шаблону и поэтому ничего не компилирует. В итоге компоновщик не может разрешить все ссылки. Выхода два: либо помешать определение в файл с объявлением, причём, даже если это заголовочный файл, компилятор с компоновщиком с трудом, но выкручиваются с множественными определениями (как и в случае со встраевыми функциями); либо в файле array_format.cpp произвести явное инстанцирование шаблона для нужных типов. А насчёт export, так оно на сегодняшний день, по-моему, реализованно только в одном компиляторе, и это не gcc.


 

Member
Статус: Не в сети
Регистрация: 11.07.2005
Откуда: Бавария
Может для кого-то это просто, но я не врублюсь никак.
Почему вот в этом простеньком коде:
Цитата:
// Stepen.cpp : Defines the entry point for the console application.
// Schitaem X v stepeni N

#include "stdafx.h"
#include <conio.h>
#include <math.h>

int n, y;
float x, R;
int _tmain()
{
cputs("Vnosim x:");
cscanf("%d", & x );
cputs("\nVnosim stepen n:");
cscanf("%d", & n );
R = 1;
y = 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);
}
}

cprintf("%d", R );
cscanf("%d", & x );
}

в обоих циклах на втором круге R превращается в ноль???
использую MS Visual Studio 2005

_________________
лучше день потерять, потом за пять минут долететь.


 

Member
Статус: Не в сети
Регистрация: 08.05.2006
Откуда: СПБ
Сантей а не легче ли вместо этих циклов просто написать R=pow(x,n)
я так понял прога в степень возводит просто

_________________
Мы все знаем, что Linux — это круто… он выполняет бесконечные циклы за 5 секунд.
* Линус Торвальдс


 

Заблокирован
Заблокирован
Статус: Не в сети
Регистрация: 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?

_________________
лучше день потерять, потом за пять минут долететь.


 

Advanced member
Статус: Не в сети
Регистрация: 09.03.2004
Откуда: Кишинёв
Сантей писал(а):
значит проблема в самом MS Visual Studio 2005?

Код:
cscanf("%d", & x );
....

cprintf("%d", R );

Нет, если заменить %d на %f , то кое-что изменится в лучшую сторону.


 

Member
Статус: Не в сети
Регистрация: 11.07.2005
Откуда: Бавария
сорри, теперь понял, спасибо

_________________
лучше день потерять, потом за пять минут долететь.


 

Member
Статус: Не в сети
Регистрация: 02.02.2008
Откуда: Ростов-на-Дону
Фото: 3
Сантей писал(а):
if (n < 0) {
n=(-n);
for( y=1; y<=n; y++ ) {
R=1/(R*x);
}
}

И что работает?
По-моему правильнее будет так:
Код:
if (n < 0) {
n=(-n);
for( y=1; y<=n; y++ ) {
R*=1/x;
}
}

а ещё лучше так:
Код:
if (n < 0) {
double mul = 1/x;
n=(-n);
for( y=1; y<=n; y++ ) {
R*=mul;
}
}


 

Member
Статус: Не в сети
Регистрация: 11.07.2004
Откуда: Воронеж
ребят вот(2Кб) вроде как работающая программа, в какое среде она написана(какой именно из С) ? не могу у себя запустить.

_________________
Удачи и мудрости.


 

Пишу в консоли. Нужно получать текущую дату и время. Посдскажите как. Заранее спасибо)
Добавлено спустя 12 минут, 51 секунду
Кстати, вот еще вопрос: подаскажите какую-нить функцию для перехода по строкам файла, типа как в паскале "Seek(filename:string, position:integer);"
Добавлено спустя 1 час, 5 минут, 57 секунд
а где вообще можно взять описание всего <fstream.h> head-файла? (желательно на русском языке.)


 

Сюда что вообще никто не заглядывает?


 

Member
Статус: Не в сети
Регистрация: 23.07.2005
Откуда: Екатеринбург
Как в консольном приложении нарисовать символ в определенной строчке и столбце?


 

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:


 

Advanced member
Статус: Не в сети
Регистрация: 09.03.2004
Откуда: Кишинёв
Provider писал(а):
ткните носом че тут не так?

Да всё не так :) .
Нужно отталкиваться от первого примера. Только число "5" заменить на переменную(к примеру назовём её count):
Код:
while (i<count)
  {
    i++;
    printf("   *   \t");
  }

Ну и вместо неправильных:
Код:
scanf("i");

нужно:
Код:
scanf("%d", &count);


ps: count конечно же как int не забыть объявить.


 

Member
Статус: Не в сети
Регистрация: 19.12.2005
Откуда: НН
Фото: 69
mein Вон оно оказывается как делать то надо :shock: Спасибо огромное! :beer: :beer: :beer:
Нужно сделать чтоб количество звездочек вводилось при запуске программы, т.е. чтоб было параметром программы. Во что я асилил:
Код:
#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 :(
Подскажите что не так плиз :weep:


 

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.


Показать сообщения за:  Поле сортировки  
Начать новую тему Новая тема / Ответить на тему Ответить  Сообщений: 1730 • Страница 48 из 87<  1 ... 45  46  47  48  49  50  51 ... 87  >
-

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3


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

Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB | Kolobok smiles © Aiwan