Хорошо, я столкнулся с некоторой непоследовательностью, и это ведет меня к дыре размером с кулак в моем мониторе, которую я бы лучше избегал.
Я прохожу учебник по SDL на www.sdltutorials.com (учебник по sdl-tutorial-basics, я уверен, что Тим Джонс прошел через несколько человек), и я столкнулся с ошибкой: 'Surf_Display 'не было объявлено в этой области.
Итак, пытаясь выяснить, что происходит не так, я написал похожий код указателя в старую программу-прямоугольник, которую я использовал, чтобы освежить в себе основы классов C ++, увидел ту же ошибку с указателем int, а затем попытался изолировать проблему в чем-то более конкретном.
Что ж, более конкретная программа прекрасно компилируется, в то время как другие взрываются, так что я предполагаю, что это что-то довольно простое, что мне не хватает, но GISing "класс указателя C ++" и т. Д. Ничего не делает, и я не знаю, как получить более конкретно.
В любом случае ... какой-то код.
Программа, которая работает ...
ct.h
#ifndef _CT_H_
#define _CT_H_
class Classtest2
{
private:
int *p_x;
public:
Classtest2();
void set_x(int);
int get_x();
};
#endif
ct.cpp
#include "ct.h"
#include <cstddef>
Classtest2::Classtest2()
{
p_x = 0;
}
void Classtest2::set_x(int x)
{
//do something neat here
}
int Classtest2::get_x()
{
return *p_x;
}
classtest2.cpp
#include "ct.h"
int main (int argc, char *argv[])
{
Classtest2 ct2;
return 0;
}
составлено с
g ++ classtest2.cpp ct.h ct.cpp -o bin / classtest2
Теперь ... программа, которая не ...
Классический ...
#ifndef _RECTANGLE_H
#define _RECTANGLE_H
namespace shapes
{
class rectangle
{
public:
int height;
int width;
int *weight;
rectangle (int, int);
rectangle ();
int area ();
void setHeight(int);
void setWidth(int);
void setDimensions(int, int);
};
}
#endif
Классический cpp с весом ...
#include "Rectangle.h"
#include <cstddef>
using namespace shapes;
rectangle::rectangle(int h, int w)
{
height = h;
width = w;
weight = NULL;
}
rectangle::rectangle()
{
height = 0;
width = 0;
weight = NULL;
}
int rectangle::area ()
{
return height * width;
}
void rectangle::setHeight(int h)
{
height = h;
}
void rectangle::setWidth(int w)
{
width = w;
}
void rectangle::setDimensions(int h, int w)
{
height = h;
width = w;
}
И классический "сделай что-нибудь простое" главное ...
#include "Rectangle.h"
#include <iostream>
using namespace std;
using namespace shapes;
int main(int argc, char* argv[])
{
rectangle tr(5,8);
cout << tr.height << endl;
cout << tr.width << endl;
return 0;
}
Первая программа прекрасно компилируется, но, конечно, она на самом деле ничего не делает, так что это не слишком удивительно. Вторая (программа-прямоугольник, которая также ничего не делает) не компилируется. Я получаю следующее ...
g ++ classtest1.cpp Rectangle.h Rectangle.cpp -o bin / classtest1
Rectangle.cpp: В конструкторе ‘shape :: rectangle :: rectangle (int, int)’:
Rectangle.cpp: 10: ошибка: «вес» не был объявлен в этой области
Rectangle.cpp: в конструкторе ‘shape :: rectangle :: rectangle ()’:
Rectangle.cpp: 17: ошибка: «вес» не был объявлен в этой области
Итак, почему первая программа может "видеть" int * p_x, а вторая не может видеть int * weight? Я пытался понять, что я делаю по-другому, и ничего не получил.