C ++: простая ошибка, которую я не могу обнаружить! C2146 - PullRequest
1 голос
/ 07 марта 2011

Довольно плохо знаком с C ++, я следую промежуточным учебникам на 3DBuzz.com и пытаюсь поэкспериментировать с их задачами.

Текущий урок по классам: http://www.3dbuzz.com/vbforum/sv_showvideo.php?v=37

Я пытаюсь перегрузить & оператор <<, чтобы вывести мою 'Точку' в виде потока, когда я хочу. Соответствующая часть видео начинается с <strong>39: 00 .

Насколько я могу судить, мой код синтаксически идентичен (хотя я новичок, поэтому я, возможно, что-то упускаю), но я получаю ошибку:

1> c: \ users \ jack \ documents \ visual studio 2010 \ projects \ myfirstgame \ myfirstgame \ main.cpp (88): ошибка C2146: синтаксическая ошибка: отсутствует ';' перед идентификатором 'myPoint

Я понимаю, что объявляю экземпляр Point & myPoint в функции перегрузки оператора ... но я не знаю, где еще я мог бы это сделать, чтобы компилятор знал, что это ... если это имеет смысл.

Любая помощь приветствуется! Спасибо

#include <iostream>
#include <cmath>

using namespace std;

class Point
{
public:
Point(float f_x = 0.0, float f_y = 0.0, float f_z = 0.0);

~Point();

void SetXYZ(float X, float Y, float Z);
void SetX(float X);
void SetY(float Y);
void SetZ(float Z);

void GetXYZ(float &X, float &Y, float &Z);
float GetX();
float GetY();
float GetZ();
private:

float x, y, z;

protected:

};

Point::Point(float f_x, float f_y, float f_z)
{
cout << "Constructor with ARGUMENTS!" << endl;

x = f_x;
y = f_y;
z = f_z;
}

void Point::GetXYZ(float &X, float &Y, float &Z)
{
X = GetX();
Y = GetY();
Z = GetZ();
}
float Point::GetX()
{
return x;
}

float Point::GetY()
 {
return y;
 }

float Point::GetZ()
{
return z;
}

void Point::SetXYZ(float X,float Y, float Z)
{
SetX(X);
SetY(Y);
SetZ(Z);
}
void Point::SetX(float X)
{
x = X;
}

void Point::SetY(float Y)
{
y = Y;
}

void Point::SetZ(float Z)
{
z = Z;
}

Point::~Point()
{
cout << "We're in the destructor" << endl;
}

 ostream &operator <<(ostream &stream, Point &myPoint)
{
stream << myPoint.GetX() << " " << myPoint.GetY() << " " myPoint.GetZ();
return stream;
}

void main()
{
float x, y, z; //Declaring floats for use in GetXYZ()

Point myLocation (1,2,-1); //Creating instance and using Point(...) function
cout << myLocation.GetX() << myLocation.GetY() << myLocation.GetZ() <<endl; // Getting xyz values and printing

myLocation.SetXYZ(2,3,-4); //Testing SetXYZ function
cout << myLocation.GetX() << myLocation.GetY() << myLocation.GetZ() <<endl; // Getting xyz values and printing


myLocation.GetXYZ(x, y, z);
cout << x << " " << y << " " << z << endl;

cout << myLocation;


    system("PAUSE");
}

РЕДАКТИРОВАТЬ: Невероятный ответ! Люблю этот сайт уже. Спасибо всем, кто заметил это ^^

Ответы [ 5 ]

4 голосов
/ 07 марта 2011

Вы пропали без вести << в:

stream << myPoint.GetX() << " " << myPoint.GetY() << " " myPoint.GetZ();
                                                       ^^
0 голосов
/ 07 марта 2011

Вот, пожалуйста:

ostream &operator <<(ostream &stream, Point &myPoint) { stream << myPoint.GetX() << " " << myPoint.GetY() << " "<< myPoint.GetZ(); return stream; } 

Обратите внимание на лишние «<<» перед myPoint.GetZ (); </p>

0 голосов
/ 07 марта 2011

Вот проблема: stream << myPoint.GetX() << " " << myPoint.GetY() << " " myPoint.GetZ(); Вам не хватает << между последним " " и последним myPoint.

0 голосов
/ 07 марта 2011

Видите разницу между этими двумя?

stream << myPoint.GetX() << " " << myPoint.GetY() << " " myPoint.GetZ();
stream << myPoint.GetX() << " " << myPoint.GetY() << " " << myPoint.GetZ();
0 голосов
/ 07 марта 2011

В строке 88 следует добавить << перед <code>myPoint.GetZ();

Ваш код:

stream << myPoint.GetX() << " " << myPoint.GetY() << " " myPoint.GetZ();

Исправление:

stream << myPoint.GetX() << " " << myPoint.GetY() << " " << myPoint.GetZ();
...