Код: Выделить всё
#include "../Simple_window.h" // get access to our window library
#include "../Graph.h"
// get access to our graphics library facilities
int main()
{
using namespace Graph_lib;
Point tl{ 100,100 };
// our graphics facilities are in Graph_lib
// to become top left corner of window
Simple_window win{ tl,600,400,"Canvas" }; // make a simple window
Graph_lib::Polygon poly;
poly.add(Point{ 300,200 });
poly.add(Point{ 350,100 });
poly.add(Point{ 400,200 });
poly.set_color(Color::red);
win.attach(poly);
win.wait_for_button();
}
Ошибка C2397. Преобразование из 'Fl_Color' в 'int' требует сужающего преобразования Shoot_me_in_the_head C:\Users\abdua\ source\repos\Graph.h 159
Я ожидал, что этот код будет работать без проблем, поскольку он написан самим Страуструпом, я скопировал исходный код из его книги и два заголовка из его веб-сайт.
Я также исправил еще две ошибки в этом заголовке.
есть идеи, как устранить эту ошибку?
код заголовка немного длинный:
Код: Выделить всё
#ifndef GRAPH_GUARD
#define GRAPH_GUARD 1
#include "Point.h"
#include
//#include
//#include
#include "fltk.h"
#include "std_lib_facilities.h"
namespace Graph_lib {
// defense against ill-behaved Linux macros:
#undef major
#undef minor
struct Color {
enum Color_type {
red=FL_RED, blue=FL_BLUE, green=FL_GREEN,
yellow=FL_YELLOW, white=FL_WHITE, black=FL_BLACK,
magenta=FL_MAGENTA, cyan=FL_CYAN, dark_red=FL_DARK_RED,
dark_green=FL_DARK_GREEN, dark_yellow=FL_DARK_YELLOW, dark_blue=FL_DARK_BLUE,
dark_magenta=FL_DARK_MAGENTA, dark_cyan=FL_DARK_CYAN
};
enum Transparency { invisible = 0, visible=255 };
Color(Color_type cc) :c(Fl_Color(cc)), v(visible) { }
Color(Color_type cc, Transparency vv) :c(Fl_Color(cc)), v(vv) { }
Color(long int cc) :c(Fl_Color(cc)), v(visible) { }
Color(Transparency vv) :c(Fl_Color()), v(vv) { }
int as_int() const { return c; }
char visibility() const { return v; }
void set_visibility(Transparency vv) { v=vv; }
private:
unsigned char v; // 0 or 1 for now
Fl_Color c;
};
struct Line_style {
enum Line_style_type {
solid=FL_SOLID, // -------
dash=FL_DASH, // - - - -
dot=FL_DOT, // .......
dashdot=FL_DASHDOT, // - . - .
dashdotdot=FL_DASHDOTDOT, // -..-..
};
Line_style(Line_style_type ss) :s(ss), w(0) { }
Line_style(Line_style_type lst, int ww) :s(lst), w(ww) { }
Line_style(int ss) :s(ss), w(0) { }
int width() const { return w; }
int style() const { return s; }
private:
int s;
int w;
};
class Font {
public:
enum Font_type {
helvetica=FL_HELVETICA,
helvetica_bold=FL_HELVETICA_BOLD,
helvetica_italic=FL_HELVETICA_ITALIC,
helvetica_bold_italic=FL_HELVETICA_BOLD_ITALIC,
courier=FL_COURIER,
courier_bold=FL_COURIER_BOLD,
courier_italic=FL_COURIER_ITALIC,
courier_bold_italic=FL_COURIER_BOLD_ITALIC,
times=FL_TIMES,
times_bold=FL_TIMES_BOLD,
times_italic=FL_TIMES_ITALIC,
times_bold_italic=FL_TIMES_BOLD_ITALIC,
symbol=FL_SYMBOL,
screen=FL_SCREEN,
screen_bold=FL_SCREEN_BOLD,
zapf_dingbats=FL_ZAPF_DINGBATS
};
Font(Font_type ff) :f(ff) { }
Font(int ff) :f(ff) { }
int as_int() const { return f; }
private:
int f;
};
template class Vector_ref {
vector v;
vector owned;
public:
Vector_ref() {}
Vector_ref(T* a, T* b=0, T* c=0, T* d=0)
{
if (a) push_back(a);
if (b) push_back(b);
if (c) push_back(c);
if (d) push_back(d);
}
~Vector_ref() { for (int i=0; i
Подробнее здесь: [url]https://stackoverflow.com/questions/78355706/strange-narrowing-conversion-error-in-ppp2-graph-h-header[/url]