對類前置宣告和包含標頭檔案的一點理解(類的交叉引用)
// 圖層類#pragma once
#include "Symbol.h"class CLayer
{
public:
CLayer(void);
virtual~CLayer(void);
void CreateNewSymbol();
private:
CSymbol* m_pSymbol; // 該圖層相關的符號指標};
// Symbol.h
// 符號類#pragma once
#include "Layer.h"class CSymbol
{
public:
CSymbol(void);
virtual~CSymbol(void);
public
CLayer *m_pRelLayer; // 符號對應的相關圖層};
// TestUnix.cpp : 定義控制檯應用程式的入口點。
//
#include "stdafx.h"
#include "Layer.h"
#include "Symbol.h"void main( void )
{
CLayer MyLayer;
}
相關推薦
對類前置宣告和包含標頭檔案的一點理解(類的交叉引用)
//Layer.h// 圖層類#pragma once #include "Symbol.h"class CLayer {public: CLayer(void); virtual~CLayer(void); void CreateNewSymbol();private:
C++ 在.h檔案中包含標頭檔案和在.cpp檔案中包含標頭檔案的原則
1、 第一個原則:如果可以不包含標頭檔案,那就不要包含了,這時候前置宣告可以解決問題。如果使用的僅僅是一個類的指標,沒有使用這個類的具體物件(非指標),也沒有訪問到類的具體成員,那麼前置宣告就可以了。因為指標這一資料型別的大小是特定的,編譯器可以獲知(C++編譯
error LNK2005 --類的宣告和定義放在一個檔案中
刷C++primer的時候,將類的宣告和定義均放在標頭檔案中,報錯error LNK2005 1> Sales_data.h 1>Sales_data.obj : error LNK2005: "public: class Sales_data & __this
標頭檔案中寫類的實現出現函式重複定義的問題
先來做一個實驗,你在一個頭檔案中定義一個類,然後把內中的一個函式的實現寫在這個標頭檔案當中。 //A_test.h #ifndefine _A_TEST_ #define _A_TEST_ class A { void test(); }; void A::test() {
opencv包含標頭檔案出錯的粗略解讀
Opencv新手遇到的問題很多問題之一就是 #include opencv標頭檔案的時候經常會出錯。程式明明就很簡單,一個稍懂opencv的人都知道程式沒有錯誤,但是一編譯就是一大堆錯誤,就是找不到標頭檔案。 fatal error C1083: 無法開啟包括檔案:“cv
Swift中不用橋接檔案和.h標頭檔案直接和C程式碼互動的方法
我們知道一般情況下Swit要想呼叫obj-c,c或c++程式碼必須通過obj-c以及橋接檔案才可以辦到,但是對於某些簡單的程式碼,我們可以跳過橋接檔案和.h標頭檔案,直接和C程式碼互動呢! 我們再Project中新增一個.c檔案,不要建立橋接檔案和對應的.h標
解決KinectSDK 包含標頭檔案"NuiApi.h"報錯問題
C:\Program Files\Microsoft SDKs\Kinect\v1.7\inc\NuiSensor.h(46): error C2146: 語法錯誤: 缺少“;”(在識別符號“INuiAudioBeam”的前面) 1>C:\Program File
對梯度下降法和反向傳播BP的一點理解
最近在學習深度學習中的梯度下降與反向傳播方面的知識。偶有心得,特此記錄。若有不足之處,煩請指正賜教。 在訓練階段,深度神經網路經過前向傳播之後,得到的預測值與先前給出真實值之間存在差距。我們可以使用損失函式來體現這種差距。損失函式的作用可以理解為
將類宣告標頭檔案、類實現檔案、類的使用檔案(主檔案)放在一起的時候應該注意的問題
#include<iostream> using namespace std; class v { public: void volume() { int vo; cin>>length>>w
c++模板類的成員函式的宣告與定義應該放在標頭檔案裡
今天嘗試自己實現vector資料結構底層,在定義vector模板類的時候,還想像往常一樣把類分為.h檔案和.cpp檔案,把成員函式的宣告放在.h檔案中,把具體實現放在.cpp檔案中,結果在測試時發現在編譯過程中報錯。除錯了很久,重視提示“無法解析的外部符號”,如圖所示
標頭檔案重複包含和變數重複定義
在c或c++中,標頭檔案重複包含問題是程式設計師必須避免的問題,也是很多新手容易犯錯的問題。為什麼要避免標頭檔案重複包含呢? 1.我們知道在編譯c或c++程式時候,編譯器首先要對程式進行預處理,預處理其中一項工作便是將你源程式中#include的標頭檔案完整的展
VB.NET學習筆記:程式碼註釋、Sub過程和Function函式註釋、窗體模組類標頭檔案註釋
註釋能使你的程式碼更加容易理解,更多時候註釋是寫給自己看的,相信我,過不了多長時間你就會把程式設計的思路忘記,有了註釋就能加快你的思路回憶。 一、程式碼註釋 很簡單,就是用英文的“’”分號開頭,可以單獨成行,也可以註釋到每句程式碼結束處。如: Public Class ClsCustom
gcc和交叉編譯標頭檔案包含問題
eclipse開發環境下,同一個工程,使用gcc成功編譯,但是使用交叉編譯,提示找不到標頭檔案,這是因為兩者預設的標頭檔案包含路徑不一樣。 在LINUX程式設計當中,經常會遇到標頭檔案包含的問題,那麼這些標頭檔案到底在哪個路徑下?具體的標頭檔案路徑依賴於程
C++中對於類來說標頭檔案(.h)和原始檔(.cpp)都應該寫些什麼 (類的常規建立)
寫類的宣告(包括類裡面的成員和方法的宣告)、函式原型、#define常數等,但一般來說不寫出具體的實現。 在寫標頭檔案時需要注意,在開頭和結尾處必須按照如下樣式加上預編譯語句(如下): #ifndef CIRCLE_H#define CIRCLE_H//你的程式碼寫在這裡#endif
標頭檔案的重複包含和變數的重複定義
為什麼會出錯呢?按照條件編譯,a.h並沒有重複包含,可是還是提示變數A重複定義了。 在這裡我們要注意一點,變數,函式,類,結構體的重複定義不僅會發生在源程式編譯的時候,在目標程式連結的時候同樣也有可能發生。我們知道c/c++編譯的基本單元是.c或.cpp檔案,各個基本單元的編譯是相互獨立的,#ifndef等
對c&c++原始檔和標頭檔案分開的好處的一點認識
對c&c++程式來說,基本上來說都是要把原始檔和標頭檔案分別編寫。一般都是代表一個基本功能的原始檔引用相應的標頭檔案。一個 相關功能的模組可能有若干對原始檔和標頭檔案組成。這是基於元件程式設計的核心。在我看來,他的好處是巨大的,是java不可比擬的,也是不可複製的:c
關於標頭檔案中的重複包含和重複定義
為了避免重複定義,一般標頭檔案中不會存放定義,只存放函式宣告和變數的宣告。但也有例外,類、inline函式和編譯時值已知的const物件可以在標頭檔案中定義,這是因為遵守“單一定義規則”(One-Definition Rule, ODR)。根據此規則, 如果對同一個類的兩個定義完全相同且出現在不同編譯單位,
C++兩個類標頭檔案互相包含
在構造自己的類時,有可能會碰到兩個類之間的相互引用問題,例如:定義了類A類B,A中使用了B定義的型別,B中也使用了A定義的型別class A{ int i; B b;}class B{ int i; A* a;}請注意上面的定義內容,一般情況下是不能出
為什麼類的定義應當寫在標頭檔案中,從而被多個原始檔包含?
比如myclass.h定義了一個類myclass(只定義類,不定義成員函式), file1.cpp裡#include "myclass.h",編譯得到file1.obj; file2.cpp裡也#in
Jni程式設計(二)jni.h 標頭檔案定義分析,以及c/c++呼叫java類的屬性和方法
在第一篇部落格中 我們初步瞭解了jni程式設計的步驟,那接下來我認為極其重要的事情是搞清楚jni.h標頭檔案裡面的結構,包括資料型別和方法的定義等,這些是必須的,否則沒有辦法進行學習,就像寫文章一樣,要先學會寫字是一樣的道理。 首先來看一下jni.h標頭檔案的組成:ps下面