Я работал над «Языком программирования C ++» Бьярна Страуструпа (2-е издание - я знаю, что мне действительно нужно получить новую копию, но это книга для библиотеки!), И у меня было несколько вопросов по одному из его более простых вопросов,В главе 2, говоря о объявлениях и константах, он перечисляет набор объявлений, некоторые из которых также являются определениями.В упражнении в конце главы он предлагает читателю вернуться назад и переписать список, на этот раз изменив все определенные объявления на простые объявления и изменив все неопределенные объявления на определение.
Я выполнил это задание, надеюсь, в основном правильно, но было несколько частей, на которых я застрял.Я был бы признателен, если бы кто-нибудь мог быстро просмотреть мой список, проверить, есть ли какой-либо из первоначального списка, который я неправильно распределил, а затем проверить мои изменения - в том числе, в частности, как объявить, но не определить typedef
, иесли мое enum
объявление-не-определение верно.Большое спасибо всем, кто помогает.Я прошу прощения, так как это не является строго прямым вопросом кода - то есть здесь нет компилируемого кода, это больше ... Я не знаю.Но в нем есть код, поэтому я надеюсь, что все в порядке.
// Original:
/*
char ch; // Definition.
int count = 1; // Definition.
char* name = "Njal"; // Definition.
struct complex { float re, im; }; // Definition.
complex cvar; // Definition.
extern complex sqrt(complex); // Declaration, NOT definition.
extern int error_number; // Declaration, NOT definition.
typedef complex point; // Definition.
float real(complex* p) { return p->re; } // Definition.
const double pi = 3.1415926535897932385; // Definition.
struct user; // Declaration, NOT definition.
template<class T> abs(T a) { return a < 0 ? -a : a; } // Definition.
enum beer { Carlsberg, Tuborg, Thor }; // Definition.
*/
// Definitions/Declarations switched:
/*
extern char ch;
extern int count;
extern char* name;
struct complex;
extern complex cvar;
complex sqrt(complex in) { // Yes, my maths may be wrong here. Doing the actual maths from memory.
complex out;
out.re = (in.re * in.re) - (in.im * in.im);
out.im = (in.re * in.im)*2;
return out;
}
int error_number;
// No idea how to declare but not define a typedef!
float real(complex* p);
extern const double pi;
struct user { string name; int age; char gender; }; // Lets assume we include <string>, and yes, using int for age *might* be a bit wasteful, but meh.
template<class T> abs(T a);
extern enum beer; // Not sure if this is right.
*/