[C++] błąd z #include <iostream>

0

witam,
mam do napisania bibliotekę która będzie miała za zadanie pokrywać wszelkie działania z zakresu wektorów, punktów, matryc itp. Doszedłem do momentu gdzie mam kilka klas (niektóre są niezależne, a niektóre dziedziczą) i większość z nich korzysta z

 #include <iostream> 

i tu chyba(!?) powstaje problem bo przy dołączaniu iostream w conajmniej 2 plikach jednoczesnie dostaję taki błąd i ostrzeżenie.

Warning	1	warning MSB8004: Output Directory does not end with a trailing slash.  This build instance will add the slash as it is required to allow proper evaluation of the Output Directory.	C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\Microsoft.CppBuild.targets	299

Error	2	error C2381: 'exit' : redefinition; __declspec(noreturn) differs	c:\program files (x86)\microsoft visual studio 10.0\vc\include\stdlib.h	353
 

co najciekawsze nie dodaję nigdzie stdlib.h

0

hmmm, a w stdafx.h nie ma czasem #include <stdlib.h>?

0

może jest, ale tak czy inaczej ja nie dołączam do mojego projektu stdafx.h

0

Jeśli stworzyłeś projekt wizardem z opcją "include precompiled headers" to stdafx musisz dołączać. Daj szerszy kontekst bo z tego niewiele wynika.

0

poszukałem w opcjach projektu opcji "Using Pre-compiled headers" ustawiłem na 'NO' i dalej to samo

0
lordmonkey napisał(a)

poszukałem w opcjach projektu opcji "Using Pre-compiled headers" ustawiłem na 'NO' i dalej to samo

sprawdź czy teraz masz to NO ustawione w każdym z plików cpp

0

sprawdziłem wszystkie pliki mają ustawione NO. załączam mój kod

point.cpp

 #include "point.h"
//reszta zbędna bo wszystko działa elegancko :)

point.h

#ifndef POINT_H
#define POINT_H

#include <glut.h>

/* tak samo jak wyżej */

#endif 

vector.cpp

 #include "vector.h"
//to samo

vector.h

 #ifndef VECTOR_H
#define VECTOR_H

#include "math.h"
#include "point.h"

#include "windows.h"
  
#include <iostream>
using namespace std;

//tak samo ja wyzej

#endif

matrix.cpp

#include "matrix.h"

Matrix::Matrix(int size)
{
	this->arr = new float[size];
	this->size = size;
	for(int i = 0; i < (size*size) ; i++)
	{
		this->arr[i]=0;
	}
	
}

ostream & operator<<(ostream& out, const Matrix& m)
{
	for(int i = 0; *(m.arr + i) != NULL; i++)
	{
		out << *(m.arr + i) << " ";
	}
	out << endl;
	return out;
}

matrix.h

 #ifndef MATRIX_H
#define MATRIX_H

#include <glut.h>
#include <iostream>
using namespace std;

class Matrix
{
public:
	Matrix(int size);
	~Matrix(){delete arr;};

	friend ostream &operator<<(ostream & out, const Matrix& m);

private:
	float *arr;
	int size;
};

#endif

zauważyłem że jak usunę #include "glut.h" z matrix.h to zamiast 2 błędów

Error	2	error C2381: 'exit' : redefinition; __declspec(noreturn) differs	c:\program files (x86)\microsoft visual studio 10.0\vc\include\stdlib.h	353
Error	6	error C2381: 'exit' : redefinition; __declspec(noreturn) differs	c:\program files (x86)\microsoft visual studio 10.0\vc\include\stdlib.h	353

dostaję tylko ten pierwszy.

przepraszam za złe formatowanie ale nie mam pojęca dlaczego nie 'zaskakiwały mi tagi z code=cpp i /code

0

OK juz rozwiązane.

Jeżeli dołączam do projektu glut.h w pliku point.h to muszę dodać
#include <stdlib.h>
przed glut.h żeby nie dostawać tego błedu.

jeżeli ktoś mógłby to wytłumaczyc byłbym wdzięczny.

1 użytkowników online, w tym zalogowanych: 0, gości: 1