C++常見錯誤及解決方法

分類:編程 時間:2016-11-08
[摘要: 1、針對湧現沒法初初化題目的毛病舉行剖析。 毛病例子: TCHAR* strLastSlash = _tcsrchr( str, TEXT(‘//’) ) error C2440: “初初化”: 沒法]

 1、針對出現無法初始化問題的錯誤進行解析。 

錯誤例子:

TCHAR* strLastSlash = _tcsrchr( str, TEXT(‘//’) )

error C2440: “初始化”: 無法從“const wchar_t *”轉換為“TCHAR *”

修改:

可以在=的右邊進行強制轉換。如下:

TCHAR* strLastSlash = (TCHAR*)_tcsrchr( str, TEXT(‘//’) ); 


2、針對警告被視為錯誤的問題進行解析。
錯誤例子:

 c:/dxsdk/samples/c++/misc/dxdiagreport/dxdiaginfo.cpp(322) : error C2220: 警告被視為錯誤- 沒有生成“object”文      件。

錯誤原因:

原因是該文件的代碼頁為英文,而我們系統中的代碼頁為中文。

解決方案:

啟動Microsoft Visual Studio 2005,文件->打開->選擇c:/dxsdk/samples/c++/misc/dxdiagreport/dxdiaginfo.cpp,然後保存。從新打開程序文件運行,此錯誤不再出現。如果上述不能去掉錯誤,還可以點擊項目,右擊選擇屬性->配置屬性->c/c++->常規,將“警告視為錯誤”的選項改為“否”。就可以!


3、編譯Capture,無法打開libci.lib
出現錯誤:

LINK : fatal error LNK1104: 無法打開文件“libci.lib”

生成日誌保存在“file://d:/DXSDK/Samples/C++/DirectShow/Capture/CaptureTex/Debug/BuildLog.htm”

CaptureTex - 1 個錯誤。 

錯誤原因:

缺少數據庫LIBCI.LIB在2003和2005中已經不存在了

解決方案:

將庫文件指向VC6中的庫文件。


4、編譯PlayWndASF 錯誤:

playwndasf.obj : error LNK2001: 無法解析的外部符號“unsigned int (__stdcall* ATL::g_pfnGetThreadACP)(void)” (?g_pfnGetThreadACP@ATL@@3P6GIXZA)

urllaunch.obj : error LNK2001: 無法解析的外部符號“unsigned int (__stdcall* ATL::g_pfnGetThreadACP)(void)” (?g_pfnGetThreadACP@ATL@@3P6GIXZA)

./Debug_Unicode/PlayWndASF.exe : fatal error LNK1120: 1 個無法解析的外部命令

生成日誌保存在“file://d:/DXSDK/Samples/C++/DirectShow/Players/PlayWndASF/Debug_Unicode/BuildLog.htm”

PlayWndASF - 3 個錯誤,個警告

========== 全部重新生成: 1 已成功, 1 已失敗, 0 已跳過==========

更改:

向數據庫依賴項中添加atlsd.lib


5、編譯demos(D:/DXSDK/Samples/C++/Demos) 

錯誤:

StdAfx.cpp

d:/program files/microsoft directx sdk (april 2007)/include/d3d9types.h(1385) : warning C4819: 該文件包含不能在當前代碼頁(936)中表示的字符。請將該文件保存為Unicode 格式以防止數據丟失

d:/DXSDK/Samples/C++/common/include/D3DFile.h(56) : error C2061: 語法錯誤: 標識符“LPDIRECTXFILEDATA”

d:/DXSDK/Samples/C++/common/include/D3DFile.h(111) : error C2061: 語法錯誤: 標識符“LPDIRECTXFILEDATA”

d:/DXSDK/Samples/C++/common/include/D3DFile.h(113) : error C2061: 語法錯誤: 標識符“LPDIRECTXFILEDATA”

生成日誌保存在“file://d:/DXSDK/Samples/C++/Demos/Donuts4/Debug/BuildLog.htm”

Donuts4 - 3 個錯誤,個警告

========== 全部重新生成: 0 已成功, 1 已失敗, 0 已跳過==========

更改:

在dsdfile.h的頂部加入#include <dxfile.h>就可以 再次編譯出現錯誤:


6、error C1010: 在查找預編譯頭時遇到意外的文件結尾。是否忘記了向源中添加“#include "stdafx.h"”?  或者 fatal error C1010: unexpected end of file while looking for precompiled header directive  解決辦法:

1)檢查出錯文件是否忘記了添加#include”stdafx.h",如果忘記了,加上;

2)要註意下類和結構結束要加分號,要是忘了也會出錯。

3)#include”stdafx.h"一定要放在最開頭。

4)開始沒錯誤,如果是添加了幾個文件進當前項目,添加了#include”stdafx.h",還是出現了這個問題,退而求其次,可以選擇在解決方案目錄下,右鍵擊出錯的文件,屬性-》c/c++-》預編譯頭文件-》不使用。


7、錯誤17error MSB3073: 命令“regsvr32 /s /c ".........

解決辦法:

在項目上點右鍵,選擇屬性”->“配置屬性”->“常規”->“目標文件擴展名”,設置為.ocx 或者.dll;

在項目上在項目上點右鍵,選擇“屬性”->“配置屬性”->“鏈接器”->“ 常規 ”->“輸出文件”,設置為$(OutDir)$(ProjectName)$(TargetExt)


8、Activex 使用DirectShow的問題解決方案
下面的編譯問題:

strmbasd.lib(dllentry.obj) : error LNK2001: unresolved external symbol "class CFactoryTemplate * g_Templates" (?g_Templates@@3PAVCFactoryTemplate@@A)


strmbasd.lib(dllentry.obj) : error LNK2001: unresolved external symbol "int g_cTemplates" (?g_cTemplates@@3HA)

解決方法:

在xxxctrl.h中加入下面的代碼

/////////////////////////////////////////////////////////////////////////////

// DllGetClassObject

extern "C"

STDAPI DllGetClassObject(REFCLSID rclsid, REFIID riid, LPVOID* ppv)

{

      AFX_MANAGE_STATE(AfxGetStaticModuleState());

      return AfxDllGetClassObject(rclsid, riid, ppv);

}


// DllCanUnloadNow

extern "C"

STDAPI DllCanUnloadNow(void)

{

      AFX_MANAGE_STATE(AfxGetStaticModuleState());

      return AfxDllCanUnloadNow();

}



9、錯誤:
\
解決辦法:
         項目屬性-》配置屬性-》自定義生成步驟 ,修改“輸出”項為“從父級或項目默認屬性繼承”。



10、error:
vtkCommon.lib(vtkSmartPointerBase.obj) : error LNK2038: 檢測到“_ITERATOR_DEBUG_LEVEL”的不匹配項:值“0”不匹配值“2”(cloudviewer.obj 中)
1>vtkCommon.lib(vtkGarbageCollector.obj) : error LNK2038: 檢測到“_ITERATOR_DEBUG_LEVEL”的不匹配項: 值“0”不匹配值“2”(cloudviewer.obj 中)
1>vtkCommon.lib(vtkDebugLeaksManager.obj) : error LNK2038: 檢測到“_ITERATOR_DEBUG_LEVEL”的不匹配項:值“0”不匹配值“2”(cloudviewer.obj 中)

錯誤原因是:

Debug使用了Release的庫文件。

即使你連接庫裏面兩個都添加著呢,但是release庫文件放在了debug前面,也是出錯的。默認按順序使用庫文件。
類似錯誤:如release下使用了Debug的庫文件,報錯類似:
error LNK2038: 檢測到“_ITERATOR_DEBUG_LEVEL”的不匹配項:值“2”不匹配值“0”.



Tags: Microsoft 解決方案 error 英文 中文

文章來源:


ads
ads

相關文章
ads

相關文章

ad