ยกตัวอย่างโค้ดต่อไปนี้:
#include <iostream>
#include <string>
int main()
{
print("Hello!");
}
void print(std::string s) {
std::cout << s << std::endl;
}
เมื่อพยายามสร้างสิ่งนี้ ฉันได้รับสิ่งต่อไปนี้:
program.cpp: In function ‘int main()’:
program.cpp:6:16: error: ‘print’ was not declared in this scope
ซึ่งสมเหตุสมผล
เหตุใดฉันจึงสามารถดำเนินการแนวคิดที่คล้ายกันในโครงสร้างได้ แต่ไม่ได้รับการตะโกนใส่
struct Snake {
...
Snake() {
...
addBlock(Block(...));
}
void addBlock(Block block) {
...
}
void update() {
...
}
} snake1;
ฉันไม่เพียงแต่ไม่ได้รับคำเตือนเท่านั้น แต่โปรแกรมยังคอมไพล์อีกด้วย! ไร้ข้อผิดพลาด! นี่เป็นเพียงลักษณะของโครงสร้างหรือไม่? เกิดอะไรขึ้นที่นี่? เห็นได้ชัดว่า addBlock(Block)
ถูกเรียกก่อนที่จะมีการประกาศวิธีการ
int i; struct s { void foo() { i = 42; } int i; };
เมื่อfoo
ถูกกำหนดไว้ภายนอกคลาสi
จะอ้างอิงถึงthis->i
อย่างชัดเจน และควรจะเหมือนกันเมื่อย้ายคำจำกัดความภายในคลาส - person dyp   schedule 30.07.2014