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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 11.08.2017, 17:14   #1
KAMLS
Форумчанин
 
Регистрация: 09.04.2017
Сообщений: 598
По умолчанию Многофайловая программа.

Здравствуйте!
Дошел в своём обучении до создания многофайловых программ.
Столкнулся с непониманием со стороны компилятора. Причем, вероятно, взаимном. Да стопудово!))
В общем есть код, который надо собрать в одну программу. Я делаю всё по инструкции учебника, но пока не получается.
Пишет мне компилятор, что не может найти verylong.h.
В общем заголовочный файл такой:
Код:
#include<iostream>
#include<string.h>
#include<stdlib.h>
using namespace std;
const int SZ=1000;
class verylong
{
private:
	char vlstr[SZ];
	int vlen;
	verylong multdigit(const int) const;
	verylong mult10(const verylong) const;
public:
	verylong() : vlen(0)
	{
		vlstr[0]='\0';
	}
	verylong(const char s[SZ])
	{
		strcpy(vlstr, s);
		vlen=strlen(s);
	}
	verylong(const unsigned long n)
	{
		ltoa(n, vlstr, 10);
		strrev(vlstr);
		vlen=strlen(vlstr);
	}
	void putvl() const;
	void getvl();
	verylong operator + (const verylong);
	verylong operator * (const verylong);
};
Реализационная часть класса verylong такая:
Код:
#include"verylong.h"
//------------------------------
void verylong::putvl()const
{
	char temp[SZ];
	strcpy(temp,vlstr);
	cout<<strrev(temp);
}
//------------------------------
void verylong::getvl()
{
	cin>>vlstr;
	vlen=strlen(vlstr);
	strrev(vlstr);
}
//-------------------------------
verylong verylong::operator + (const verylong v)
{
	char temp[SZ];
	int j;
	int maxlen=(vlen>v.vlen)? vlen : v.vlen;
	int carry=0;
	for(j=0; j<maxlen; j++)
	{
		int d1=(j>vlen-1) ? 0:vlstr[j]-'0';
		int d2=(j>v.vlen-1) ? 0:v.vlstr[j]-'0';
		int digitsum=d1+d2+carry;
		if (digitsum>=10)
		{
			digitsum-=10;
			carry=1;
		}
		else
			carry=0;
		temp[j]=digitsum+'0';
	}
	if(carry==1)
		temp[j++]='1';
	temp[j]='\0';
	return verylong(temp);
}
//-------------------------------------------------
verylong verylong::operator * (const verylong v)
{
	verylong pprod;
	verylong tempsum;
	for(int j=0; j<v.vlen; j++)
	{
		int digit=v.vlstr[j]-'0';
		pprod=multidigit(digit);
		for(int k=0; k<j; k++)
			pprod=mult10(pprod);
		tempsum=tempsum+pprod;
	}
	return tempsum;
}
//----------------------------------------------
verylong verylong::mult10(const verylong v) const
{
	char temp[SZ];
	for(int j=v.vlen-1; j>=0; j--)
		temp[j+1]=v.vlstr[j];
	temp[0]='0';
	temp[v.vlen+1]='\0';
	return verylong (temp);
}
//-------------------------------------------------
verylong verylong::multdigit(const int d2) const
{
	char temp[SZ];
	int j, carry=0;
	for(j=0; j<vlen; j++)
	{
		int d1=vlstr[j]-'0';
		int digitprod=d1*d2;
		digitprod+=carry;
		if(digitprod>=10)
		{
			carry=digitprod/10;
			digitprod-=carry*10;
		}
		else
			carry=0;
		temp[j]=digitprod+'0';
	}
	if(carry !=0)
		temp[j++]=carry+'0';
	temp[j]='\0';
	return verylong(temp);
}
Сама программа которая это всё использует такая:

Код:
#include "stdafx.h"
#include"verylong.h"

int _tmain(int argc, _TCHAR* argv[])
{
	unsigned long numb, j;
	verylong fact=1;
	cout<<"\n\nВведите число: ";
	cin>>numb;
	for(j=numb; j>0; j--)
		fact=fact*j;
	cout<<"Факториал= ";
	fact.putvl();
	cout<<endl;
	return 0;
}
Как всё это собрать в кучу не понимаю. Поверьте, использовал немалое количество вариантов чего и как нажать в какой последовательности и т.д и т.п...
Все эти директории каталоги и так далее подключал нажимал на точечки в списке и пока не добился результата.
У меня Visual C++ 2008. На русском языке.
Помогите пожалуйста одолеть проблему.
KAMLS вне форума Ответить с цитированием
Старый 11.08.2017, 19:00   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,707
По умолчанию

Не знаю, что вы там нажимали и где файлы лежат вы то же не показываете. В студии создаете новый вин32 консольный проект и все три файла кидаете рядом друг с другом ( тем где создатся с мейном). Потом кликаете правой на проекте и выбираете добавить - уже существующие и выбираете ваши verylong h/cpp
p51x вне форума Ответить с цитированием
Старый 12.08.2017, 11:11   #3
KAMLS
Форумчанин
 
Регистрация: 09.04.2017
Сообщений: 598
По умолчанию

Понимаете, делаю всё по инструкции. Но пока не получается. Вот скриншоты действий.
Еще пишет:
cpp(91) : fatal error C1010: непредвиденный конец файла во время поиска предкомпилированного заголовка. Возможно, вы забыли добавить директиву "#include "stdafx.h"" в источник.

В какой источник?
Посоветуйте пожалуйста правильные действия. Там на скриншоте видно отчетливо, что заголовочный файл verylong.h включен в проект. И реализационная часть verylong.cpp тоже.
Изображения
Тип файла: jpg кадр.jpg (98.2 Кб, 123 просмотров)
Тип файла: jpg кадр_2.jpg (97.5 Кб, 120 просмотров)
Тип файла: jpg кадр_3.jpg (73.6 Кб, 92 просмотров)
Тип файла: jpg кадр_4.jpg (76.0 Кб, 123 просмотров)
Тип файла: jpg кадр_5.jpg (105.2 Кб, 120 просмотров)
KAMLS вне форума Ответить с цитированием
Старый 12.08.2017, 11:15   #4
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

в исходный файл ваш(поидее это вроде каждый cpp файл).

вы хоть обращайте внимание на настройки проекта и прочие файлы в проекте.
(Как вариант отключить его и удалить stdafx.* файлы)
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 12.08.2017, 12:04   #5
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,707
По умолчанию

Если у вас включены предкомпиленные заголовки, то во всех cpp первым пропишите включение stdafx.h

П.С. И да, проблема с stdafx и не находит ваш verylong (как вы писали в начале темы) это разные вещи.
p51x вне форума Ответить с цитированием
Старый 12.08.2017, 12:25   #6
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,330
По умолчанию

Цитата:
Сообщение от KAMLS Посмотреть сообщение
В какой источник
Который source - исходник.
Если хотите заниматься всем этим серьезно - забейте как можно раньше на русифицированные тулзы.
waleri вне форума Ответить с цитированием
Старый 12.08.2017, 19:27   #7
KAMLS
Форумчанин
 
Регистрация: 09.04.2017
Сообщений: 598
По умолчанию

Спасибо всем. Проблему победил))
KAMLS вне форума Ответить с цитированием
Старый 13.08.2017, 10:11   #8
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,707
По умолчанию

Скажите, а какой тайный смысл использовать IDE, которой 10 лет? И компилятор, который не слышал о нескольких новых стандартах? Что это за мазохизм такой?
p51x вне форума Ответить с цитированием
Старый 14.08.2017, 05:50   #9
KAMLS
Форумчанин
 
Регистрация: 09.04.2017
Сообщений: 598
По умолчанию

)))Да я еще XP юзаю. Вот и это..В общем..
Но скоро перестроюсь! Хочу ноут взять в кредит с норм системой.))
KAMLS вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не запускается программа. Программа должна заполнить массив символом. Через процедуру. anasttb Паскаль, Turbo Pascal, PascalABC.NET 1 27.03.2017 18:31
нужна программа QControl программа для внутрилабораторного контроля качества Версия 5.5. миньен Софт 7 02.03.2014 00:28
Программа на Pascal в Lazarus и программа для одномерного массива целых чисел Yegorka Lazarus, Free Pascal, CodeTyphon 13 20.12.2012 18:02
Программа с применением записей и программа с применение множеств smert99 Помощь студентам 0 16.06.2011 23:14
Программа открыается если есть другая программа. bookkc Паскаль, Turbo Pascal, PascalABC.NET 12 14.10.2009 20:09