Re: [問題] 標頭檔的問題
看板C_and_CPP (C/C++)作者nh60211as (xXx_5354M3_31M0_xXx)時間4年前 (2021/01/18 23:55)推噓1(1推 0噓 7→)留言8則, 3人參與討論串2/2 (看更多)
namespace glm
{
struct vec2
{
vec2(double x_, double y_):x(x_), y(y_) {}
double x;
double y;
};
}
class polygon
{
public:
polygon() {}
polygon(std::vector<glm::vec2> vec): vertices(vec) {}
std::vector<glm::vec2> vertices;
};
要在 global scope 初始化一個複雜的變數有這些方法
https://en.cppreference.com/w/cpp/language/initialization
我只講你這個例子幾個我自己會用的方法
1. Default initialization
https://en.cppreference.com/w/cpp/language/default_initialization
polygon cube_global;
cube_global.vertices的大小是0
2. List initialization
https://en.cppreference.com/w/cpp/language/list_initialization
polygon cube_global { std::vector<glm::vec2> { glm::vec2{1.0, 2.0},
glm::vec2{3.0, 4.0} } };
cube_global.vertices的大小是2
這個初始化過程是先找到polygon的建構式
polygon(std::vector<glm::vec2> { glm::vec2{1.0, 2.0},
glm::vec2{3.0, 4.0} })
然後再找到std::vector<glm::vec2>的建構式
std::vector<glm::vec2>( { glm::vec2{1.0, 2.0},
glm::vec2{3.0, 4.0} } )
最後找到glm::vec2的建構式 (註:我沒有去找glm的實作,所以先用我上面寫的定義)
glm::vec2(double x_, double y_)
3. Direct initialization
https://en.cppreference.com/w/cpp/language/direct_initialization
polygon cube_global ( std::vector<glm::vec2>( 5, glm::vec2(1.0,1.0)) );
cube_global.vertices的大小是5
這很直觀,就是呼叫什麼建構式就做什麼事
4. 使用函式進行Copy initialization(?)
https://en.cppreference.com/w/cpp/language/copy_initialization
static inline polygon polygon_factory()
{
std::vector<glm::vec2> vec2_vector;
for(int i=0;i<1250;i++)
{
vec2_vector.push_back(glm::vec2(i,i));
}
return polygon(vec2_vector);
}
polygon cube_global = polygon_factory();
cube_global.vertices的大小是1250
很特定的物件我會用這個方法
--------------------------------------------------------------
你會有問題的應該是List initialization的這個,建議你在寫一個邏輯太複雜的物件
不要使用,或是多多研究後再使用
以上有錯請指正
--
https://i.imgur.com/uQyKwdk.png

--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 36.225.184.161 (臺灣)
※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1610985353.A.CE2.html
→
01/18 23:56,
4年前
, 1F
01/18 23:56, 1F
※ 編輯: nh60211as (36.225.184.161 臺灣), 01/19/2021 08:03:06
推
01/19 12:14,
4年前
, 2F
01/19 12:14, 2F
→
01/19 12:15,
4年前
, 3F
01/19 12:15, 3F
我剛剛找了一下網路上的文章看到,
https://stackoverflow.com/a/51886355
一個C++程式有declaration(宣告)、
definition(定義)、
statement(陳述)。
你在global可以做的事情只有宣告跟定義,而在你這個例子你想做的事情是定義
polygon cube為某個變數。
而cube.vertices = ... 是一個陳述句所以不能在global scope做。
相關的C++標準我還沒找到。
→
01/19 12:27,
4年前
, 4F
01/19 12:27, 4F
→
01/19 12:28,
4年前
, 5F
01/19 12:28, 5F
→
01/19 12:30,
4年前
, 6F
01/19 12:30, 6F
※ 編輯: nh60211as (111.251.129.56 臺灣), 01/19/2021 12:50:09
※ 編輯: nh60211as (111.251.129.56 臺灣), 01/19/2021 12:53:55
→
01/19 14:37,
4年前
, 7F
01/19 14:37, 7F
→
01/19 15:06,
4年前
, 8F
01/19 15:06, 8F
討論串 (同標題文章)
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章