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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 30.06.2010, 19:22   #11
Selestis
Форумчанин
 
Аватар для Selestis
 
Регистрация: 21.01.2009
Сообщений: 719
По умолчанию

ОК.
Проект:
Код:
#include "stdafx.h"
#include "math.h"
#include <iostream>
#include "..\..\SBE\SBGeometry.h"

int _tmain(int argc, _TCHAR* argv[])
{
	TVector V1,V2;

	V1.x = 1;
	V1.y = 2;
	V1.z = 3;

	//V1(1,1,1);
	V1.make(1,1,1);

	//V1 = V1 + V1;

	//V2 = V1;
	//V1.Normalize();
	//float a = V1 * V1;

	std::cout << V1.x;
	return 0;
}
.h:

Код:
#include "stdafx.h"
#pragma once

typedef float TVector4f[4];



struct TVector
{
	float x,y,z;
	inline void make(float ax, float ay, float az);
	void operator ()(float ax,float ay,float az);
	inline TVector operator ()(TVector4f V);
	TVector operator +(TVector V);
	inline TVector operator -(TVector V);
	inline TVector operator -();

	inline float operator *(TVector V);
	inline TVector operator *( float f) ;
	inline TVector operator *( TMatrix M);
	inline TVector operator /(float f);
	inline TVector operator /(TVector V);
	inline float operator [](int i) ;
	inline bool operator ==(TVector V);
	inline bool operator !=(TVector V);
	void operator  =(TVector V);

	inline float SqrLength();
	inline float Length();
	void Normalize();
	TVector Norm();

	//inline TVector4f AsVector4f() {TVector4f Result; Result[0] = x; Result[1] = y; Result[2] = z; Result[3] = 0; return Result;};
};
.сpp:
Код:
#include "stdafx.h"
#include "math.h"
#include "SBGeometry.h"
#pragma once


//======================TVector implementation==================

inline void TVector::make(float ax, float ay, float az)
{x = ax;y = ay;z = az;};
void TVector::operator ()(float ax,float ay,float az) 
{x = ax; y = ay; z = az;};
inline TVector TVector::operator ()(TVector4f V) {TVector Result; Result.x = V[0];Result.y = V[1];Result.z = V[2]; return Result;};

TVector TVector::operator +(TVector V)
{
	TVector Result;
	Result.x = x + V.x;
	Result.y = y + V.y;
	Result.z = z + V.z;
	return Result;
};
inline TVector TVector::operator -(TVector V)
{
	TVector Result;
	Result.x = x - V.x;
	Result.y = y - V.y;
	Result.z = z - V.z;
	return Result;
};
inline TVector TVector::operator -(){TVector Result; Result.x = -x; Result.y = -y; Result.z = -z; return Result;};
inline float TVector::operator *(TVector V){	return x * V.x + y * V.y + z * V.z;};
inline TVector TVector::operator *( float f) 
{
	TVector Result;
	Result.x = x * f;
	Result.y = y * f;
	Result.z = z * f;
	return Result;
};
inline TVector TVector::operator *(TMatrix M)
{
	TVector Result;
	Result.x = x * M.m[0][0] + y * M.m[1][0] + z * M.m[2][0];
	Result.y = x * M.m[0][1] + y * M.m[1][1] + z * M.m[2][1];
	Result.z = x * M.m[0][2] + y * M.m[1][2] + z * M.m[2][2];
	return Result;
};
inline TVector TVector::operator /(float f)
{
	TVector Result;
	Result.x = x / f;
	Result.y = y / f;
	Result.z = z / f;
	return Result;
};
inline TVector TVector::operator /(TVector V)
{
	TVector Result;
	Result.x = y * V.z - z * V.y;
	Result.y = z * V.x - x * V.z;
	Result.z = x * V.y - y * V.x;
	return Result;
};

inline float TVector::operator [](int i) 
{
	if (i==0) return x; else
	if (i==1) return y; else
	if (i==2) return z;
};
inline bool TVector::operator ==(TVector V) {return (x==V.x)&&(y==V.y)&&(z==V.z);};
inline bool TVector::operator !=(TVector V) {return (x!=V.x)||(y!=V.y)||(z!=V.z);};
void TVector::operator  =(TVector V) {x = V.x; y = V.y; z = V.z;};

inline float TVector::SqrLength() {return x*x + y*y + z*z;};
inline float TVector::Length() {return sqrt(x*x + y*y + z*z);};
void TVector::Normalize()
{
	float l = Length();
	if (l != 0)
	{
		x = x/l;
		y = y/l;
		z = z/l;
	}
};
TVector TVector::Norm()
{
	float l = Length();
	TVector Result;
	if (l != 0) l = 1;
	Result.x = x/l;
	Result.y = y/l;
	Result.z = z/l;
	return Result;
};
Изобретатель велосипедов
Selestis вне форума Ответить с цитированием
Старый 30.06.2010, 21:43   #12
liljon
Форумчанин
 
Регистрация: 03.01.2010
Сообщений: 229
По умолчанию

в определении функции писать inline ненадо, только в объявлении, тоесть:

Код:
class test{
  public:
    test();
   inline void lol();
};

test::test()
{
}

void test::lol()
{
}
подпись

Последний раз редактировалось liljon; 30.06.2010 в 21:46.
liljon вне форума Ответить с цитированием
Старый 30.06.2010, 21:51   #13
Selestis
Форумчанин
 
Аватар для Selestis
 
Регистрация: 21.01.2009
Сообщений: 719
По умолчанию

О, спасибо, учту. Да вот только проблему это, увы, не решило :-(
Изобретатель велосипедов
Selestis вне форума Ответить с цитированием
Старый 30.06.2010, 22:06   #14
liljon
Форумчанин
 
Регистрация: 03.01.2010
Сообщений: 229
По умолчанию

вам скриншот прислать? или вы хотите сказать, что у вас компилятор неправильный? везде из определения функций убирайте inline.
подпись
liljon вне форума Ответить с цитированием
Старый 30.06.2010, 22:12   #15
liljon
Форумчанин
 
Регистрация: 03.01.2010
Сообщений: 229
По умолчанию

все.. я понял. добавте .сpp файл в проект Его нету в списке файлов для компиляции, от чего компилятор и ругаеться, ведь не может найти определение функции, поэтому функция и не зарегистрирована.
подпись
liljon вне форума Ответить с цитированием
Старый 30.06.2010, 22:16   #16
Selestis
Форумчанин
 
Аватар для Selestis
 
Регистрация: 21.01.2009
Сообщений: 719
По умолчанию

Какой ещё скриншот???
Если вы имели в виду то, что написали, то я это сделал: убрал директивы из имплементации функций, оставив только в объявлении:
Код:
void TVector::make(float ax, float ay, float az)
{x = ax;y = ay;z = az;};
void TVector::operator ()(float ax,float ay,float az) 
{x = ax; y = ay; z = az;};
 TVector TVector::operator ()(TVector4f V) {TVector Result; Result.x = V[0];Result.y = V[1];Result.z = V[2]; return Result;};

TVector TVector::operator +(TVector V)
{
	TVector Result;
	Result.x = x + V.x;
	Result.y = y + V.y;
	Result.z = z + V.z;
	return Result;
};
 TVector TVector::operator -(TVector V)
{
	TVector Result;
	Result.x = x - V.x;
	Result.y = y - V.y;
	Result.z = z - V.z;
	return Result;
};
 TVector TVector::operator -(){TVector Result; Result.x = -x; Result.y = -y; Result.z = -z; return Result;};
 float TVector::operator *(TVector V){	return x * V.x + y * V.y + z * V.z;};
 TVector TVector::operator *( float f) 
{
	TVector Result;
	Result.x = x * f;
	Result.y = y * f;
	Result.z = z * f;
	return Result;
};
 TVector TVector::operator *(TMatrix M)
{
	TVector Result;
	Result.x = x * M.m[0][0] + y * M.m[1][0] + z * M.m[2][0];
	Result.y = x * M.m[0][1] + y * M.m[1][1] + z * M.m[2][1];
	Result.z = x * M.m[0][2] + y * M.m[1][2] + z * M.m[2][2];
	return Result;
};
 TVector TVector::operator /(float f)
{
	TVector Result;
	Result.x = x / f;
	Result.y = y / f;
	Result.z = z / f;
	return Result;
};
 TVector TVector::operator /(TVector V)
{
	TVector Result;
	Result.x = y * V.z - z * V.y;
	Result.y = z * V.x - x * V.z;
	Result.z = x * V.y - y * V.x;
	return Result;
};

 float TVector::operator [](int i) 
{
	if (i==0) return x; else
	if (i==1) return y; else
	if (i==2) return z;
};
 bool TVector::operator ==(TVector V) {return (x==V.x)&&(y==V.y)&&(z==V.z);};
 bool TVector::operator !=(TVector V) {return (x!=V.x)||(y!=V.y)||(z!=V.z);};
void TVector::operator  =(TVector V) {x = V.x; y = V.y; z = V.z;};

 float TVector::SqrLength() {return x*x + y*y + z*z;};
 float TVector::Length() {return sqrt(x*x + y*y + z*z);};
void TVector::Normalize()
{
	float l = Length();
	if (l != 0)
	{
		x = x/l;
		y = y/l;
		z = z/l;
	}
};
TVector TVector::Norm()
{
	float l = Length();
	TVector Result;
	if (l != 0) l = 1;
	Result.x = x/l;
	Result.y = y/l;
	Result.z = z/l;
	return Result;
};
Хидер, как вы сказали, не изменён. И это не компилится. Вернее, компилится, если не использовать ни одной из этих функций и операторов, но только в этом весьма малоинтересном случае.
Изобретатель велосипедов

Последний раз редактировалось Selestis; 30.06.2010 в 22:19.
Selestis вне форума Ответить с цитированием
Старый 30.06.2010, 22:17   #17
liljon
Форумчанин
 
Регистрация: 03.01.2010
Сообщений: 229
По умолчанию

Цитата:
Сообщение от liljon Посмотреть сообщение
все.. я понял. добавте .сpp файл в проект Его нету в списке файлов для компиляции, от чего компилятор и ругаеться, ведь не может найти определение функции, поэтому функция и не зарегистрирована.

во во , точно вы просто прозевали это сделать )
подпись
liljon вне форума Ответить с цитированием
Старый 30.06.2010, 22:23   #18
Selestis
Форумчанин
 
Аватар для Selestis
 
Регистрация: 21.01.2009
Сообщений: 719
По умолчанию

Вроде бы включён... Вот окошко проекта:

Ещё один момент нашёл: компилируется всё прекрасно, вне зависимости от чего бы то ни было, а вот линкер выдает лажу при сборке...
Изобретатель велосипедов

Последний раз редактировалось Selestis; 30.06.2010 в 22:25.
Selestis вне форума Ответить с цитированием
Старый 30.06.2010, 22:25   #19
liljon
Форумчанин
 
Регистрация: 03.01.2010
Сообщений: 229
По умолчанию

продолжаем из
Код:

int _tmain(int argc, _TCHAR* argv[])
{
	TVector V1,V2;

	V1.x = 1;
	V1.y = 2;
	V1.z = 3;

	//V1(1,1,1);
	V1.make(1,1,1);

	//V1 = V1 + V1;

	//V2 = V1;
	//V1.Normalize();
	//float a = V1 * V1;

	std::cout << V1.x;
	return 0;
}
закоментируйте V1.make(1,1,1);
Без него компилиться ?
подпись
liljon вне форума Ответить с цитированием
Старый 30.06.2010, 22:27   #20
Selestis
Форумчанин
 
Аватар для Selestis
 
Регистрация: 21.01.2009
Сообщений: 719
По умолчанию

Да, тогда всё ништяк. Поэтому у всего остального тоже комментарии)

Я вообще склоняюсь к мысли, что ошибка, учитывая мои навыки в С++, какая-то на редкость тупая, типа файлы неправильно подключил или скобки не там поставил, образно говоря...
Изобретатель велосипедов

Последний раз редактировалось Selestis; 30.06.2010 в 22:33.
Selestis вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вычислить используя, оператор цикла for и оператор безусловного пе Knubbe Помощь студентам 1 18.12.2009 10:24
inline функции pproger Общие вопросы C/C++ 7 19.10.2009 23:46
inline asm в gcc drRobert Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 0 23.08.2008 10:26
ошибка в inline функции Tan4ik Помощь студентам 2 04.05.2008 21:26
inline??? пыхта4ог Общие вопросы C/C++ 2 09.11.2007 17:54