📄 c++错误.txt
字号:
p2=(int *)p1;
printf ("%d,%d",*p1,*p2);
}
指向不同类型的指针变量进行强制转换后赋值,在C中是常用的,例如,用malloc函数开辟的数据存储单元,函数的返回值是一个空指针(void),需要用强制转换成指向所需存储类型,如指向一个结构体,用以组成一个链表:
struct str
{
int a;
struct str *next;
}*p1;
/* 用户程序列 */
p1=(struct str *)malloc (size_t,size)
在ICCAVR中,malloc函数返回的是void类型的指针,将其强制转换为struct str类型的结构体指针。
26、混淆数组与指针变量的区别
例如:
main ()
{
int i,a[5];
for (i=0;i<5;i++)
scanf ("%d",a++);
}
在上例中,设计者意图通过a++的操作,引用a数组的不同元素。由于C规定数组名代表数组的首地址,它的值是一个常量,因此用a++是错误的。应改为用指针变量来实现,如:
main ()
{
int i,a[5],*p;
p=a;
for (i=0;i<5;i++)
scanf ("%d",p++);
}
或:
main ()
{
int a[5],*p;
for (p=a;p<a+5;p++)
scanf ("%d",p);
}
27、混淆结构体类型与结构体变量的区别
例如:
struct worker
{
unsigned char num;
char name[20];
};
worker.num=1;
在上例中,只是说明了一种struct worker的结构,但是C编译器并没有为这种类型的结构体变量开辟存储空间,因此不能对结构体类型赋值。应用该类型定义了一个结体类型的变量后,才能对这个变量赋值,应改为:
struct worker
{
unsigned char num;
char name[20];
};
struct worker work;
work.num=1;
http://zhhui.blogchina.com/221785.html
VC编译常见错误- -
1、Fatal Error C1010
unexpected end of file while looking for precompiled header directive
这一般是由于使用了参数/Yu"stdafx.h",意思是在每个文件中都应该使用#include来包含这个头文件。一般改正,就是在每个。CPP文件中包含这个文件就可以。
2、LNK2001 on __beginthreadex and __endthreadex
这是一个非常常见的链接错误。原因是由于在VC3。0以后所有的MFC类都是线程安全的,在MFC类库中使用了Thread Local Storage (TLS)提供预处理的数据。因此如果程序中包含了"stfafx.h"头文件或者使用了,MFC类库中的类就会使用MSVCRTx0.DLL 来进行链接。改正方法如下:
On Visual C 2.x, 5.0, and 6.0:
Select the Project menu, and then continue Steps 2 through 5 below.
On Visual C 4.x:
Select the Build menu.
Select the Settings... option.
Select the C/C++ tab.
Select Code Generation on the Category list box.
Finally, make a selection other than Single-Threaded on the Use Run Time Library list box.
如果使用了"Multithreaded using DLL"方式还要求在预处理符号中加上_AFXDLL 符号.
还在LIBC。LIB是C Runtime的静态链接库。
MSVCRTx0.DLL 是C Runtime的动态链接库。
如果程序中包含了任何MFC代码,或者编译使用了/MT选项,都要求使用多线程库。
为什么在程序中包含了"StdAfx.h"文件也会出现这个连接错误呢?是由于在"StdAfx.h"中使用了MFC类,并且重载了new等操作符,如果在程序中使用了NEW等就会出现链接错误。
1、Fatal Error C1010
unexpected end of file while looking for precompiled header directive
这一般是由于使用了参数/Yu"stdafx.h",意思是在每个文件中都应该使用#include来包含这个头文件。一般改正,就是在每个。CPP文件中包含这个文件就可以。
2、LNK2001 on __beginthreadex and __endthreadex
这是一个非常常见的链接错误。原因是由于在VC3。0以后所有的MFC类都是线程安全的,在MFC类库中使用了Thread Local Storage (TLS)提供预处理的数据。因此如果程序中包含了"stfafx.h"头文件或者使用了,MFC类库中的类就会使用MSVCRTx0.DLL 来进行链接。改正方法如下:
On Visual C 2.x, 5.0, and 6.0:
Select the Project menu, and then continue Steps 2 through 5 below.
On Visual C 4.x:
Select the Build menu.
Select the Settings... option.
Select the C/C++ tab.
Select Code Generation on the Category list box.
Finally, make a selection other than Single-Threaded on the Use Run Time Library list box.
如果使用了"Multithreaded using DLL"方式还要求在预处理符号中加上_AFXDLL 符号.
还在LIBC。LIB是C Runtime的静态链接库。
MSVCRTx0.DLL 是C Runtime的动态链接库。
如果程序中包含了任何MFC代码,或者编译使用了/MT选项,都要求使用多线程库。
为什么在程序中包含了"StdAfx.h"文件也会出现这个连接错误呢?是由于在"StdAfx.h"中使用了MFC类,并且重载了new等操作符,如果在程序中使用了NEW等就会出现链接错误。
http://www.blog.edu.cn/user2/shuquanying/archives/2006/1327664.shtml
Visual C++ Error Messages
Visual C++ Error Messages
This page contains a listing of "difficult to diagnose" error messages and possible fixes. I haven't taught a programming class that uses Visual C++ in several years so this list is probably out of date by now. It was valid for Microsoft Visual C++ version 6.0 service pack 3.
C1001: INTERNAL COMPILER ERROR (compiler file 'msc1.cpp', line 1786) Please choose the Technical Support command on the Visual C++ Help menu, or open the Technical Support help file for more information
This error results from leaving off the parentheses immediately following the function name in a function header. To correct the error simply add () to the end of the function name.
C1010: unexpected end of file while looking for precompiled header directive
If your project is an MFC AppWizard created project then this error results from not #including StdAfx.h as the first #i nclude statement (before any other #i ncludes, data declarations, or executable program code).
C1083: Cannot open precompiled header file: 'Debug/<Project-Name>.pch': No such file or directory
This error results from a missing file - the compiled version of StdAfx.cpp. Visual C++ does a poor job of keeping track of this file and frequently "forgets" how to build it. This problem often occurs after restoring a saved workspace from diskette without the Debug directory. To fix the error select StdAfx.cpp from the workspace file list them choose Compile from the Build menu. If that doesn't work the go to Project -> Settings, select the C/C++ tab, and click the radio button labeled Create Precompiled Headers.
C2001: newline in constant
This error is usually caused by a string or character constant that is missing its closing ' or " symbol.
C2065: '<data-member name>' : undeclared identifier
If this error occurs in one of your member functions then it is generally the result of forgetting the class scope operator in front of the function name in your .cpp file.
C2143: syntax error : missing ';' before 'PCH creation point'
Check each of the #i nclude files to ensure that the closing brace of each class declaration is followed by a semicolon.
C2143: syntax error : missing ';' before '*'
If this error is followed by two C2501 errors then the problem is an undeclared class name within a pointer declaration.
For example, the declaration:
CClass *pObject;
will generate the above error message followed by a C2501 error message for 'CClass' and another C2501 message for 'pObject'. The problem is that the compiler isn't recognizing CClass as a valid class/type name. To correct the problem add a #i nclude of the file containing the declaration of CClass (e.g., #i nclude CClass.h)
C2447: missing function header (old-style formal list?)
This error usually results from a missing { or use of a ; instead of a { following the parameter list of a function header.
C2511: '<function-name>' : overloaded member function not found in '<class-name>'
This error results from a mismatch in the parameter list of a member function declaration (.h file) and definition (.ccp file). Check the forward declaration of the function in the .h file and its definition in the .cpp file and ensure that the number of parameters and the type of each parameter match exactly.
C2512: '<constructor-function-name>' : no appropriate default constructor available
This error usually occurs when you implement the constructor function of a derived class and forget to include parameter passing to the base class constructor function. For example assume that CDerived is derived from CBase and that the CBase constructor function requires one parameter (e.g., int A). If you define the CDerived constructor function as:
CDerived::CDerived(int A, int B) { ... }
the compiler will issue the above error message on the line containing the function header of CDerived::CDerived() because you haven't provided instructions for routing the parameter A to CBase::CBase(). Because you didn't provide instructions the compiler assumes that CBase::CBase() requires no arguments and it complains because no version of CBase::CBase() has been defined that accepts zero arguments.
If you intended to provide a version of CBase::CBase() that requires no arguments then the error message indicates that you forgot to declare that function in your base class declaration (e.g., in CBase.h).
If CBase::CBase() does require one or more arguments then you must correct the problem by including explicit instructions for passing parameters from the derived class constructor function to the base class constructor function. The correction for the example above is:
CDerived::CDerived(int A, int B) : CBase(A) { ... }
C2556: '<function-name>' : overloaded functions only differ by return type
C2371: '<function-name>' : redefinition; different basic types
These errors usually result from a mismatch of function type between a .h and .cpp file. Check the forward declaration of the function in the .h file and its definition in the .cpp file and make the function return type identical in both files.
C2601: '<function-name>' : local function definitions are illegal
This error results from defining one function inside the body of another function. It usually means that you omitted one or more } symbols in the function just before the function named in the error message.
C2653: '<Class-Name>' : is not a class or namespace name
This error usually results from not having #i nclude "StdAfx.h" as the first #i nclude statement in your class.cpp file. It can also occur if your class definition is in a .h file and you forget to #i nclude that .h file in another file that refers to the class name.
C2661: '<Class-Name>::<Function-Name>' : no overloaded function takes n parameters
This error indicates a mismatch between the parameters used in a function call (e.g., from main.cpp) and the declaration of the function. The function call is passing n parameters and there is no function declaration that uses that number of parameters.
LNK1104: Cannot open file nafxcwd.lib
This error sometimes occurs when a project uses a class from the MFC but the project settings don't explicitly tell the link editor to look in the MFC libraries.
Go to Project --> Settings (Build --> Settings in Visual C++ 4.0). On the General tab check the box that says "Use MFC in a Shared DLL".
LNK1168: cannot open Debug\<Project-Name>.exe for writing
This error occurs when the link editor attempts to write to a .exe file that is currently in use. The .exe file of an executing program is write protected until the program is terminated. Look at the status bar at the bottom of your screen and find the icon representing your executable application. Open the application and exit from it. Then select Build.
LNK2001: unresolved external symbol __endthreadex
LNK2001: unresolved external symbol __beginthreadex
These errors result from using an MFC object or function without telling the link editor to search the MFC libraries.
Go to Project --> Settings (Build --> Settings in Visual C++ 4.0). On the General tab check the box that says "Use MFC in a Shared DLL".
LNK2001: unresolved external symbol _main
Your project doesn't contain a function called main(). The error usually results from forgeting to add main.cpp to the project workspace.
<File>.obj : error LNK2001: unresolved external symbol "public: void __thiscall <Class1>::<Function1>(<Type>)"
This a generic form of a LNK2001 error where <File>.obj can be any object file in your project and <Class1>::<Function1>(<Type>) can be any function in any class. Substitute the specific <File>, <Class>, <Function>, and <Type> in your message into the instructions below to diagnose and correct the problem.
An LNK2001 error means that the link editor is looking for a compiled function and can't find it. The call to the "missing function" is somewhere in <File>.cpp. Unfortunately, double-clicking on the error message won't take you to the point in <File.cpp> where the function is called but you can search for it with Find or Find In Files. The function the link editor can't find is a member of <Class>, its name is <Function1>, and its return type is <Type>.
There are two common reasons for a LNK2001 error:
The call in <File>.cpp doesn't match the function prototype in <Class>.h and/or the implementation in <Class>.cpp. The mismatch may be in the function name, return type, or number and/or type of parameters. Correction strategies include:
Check that the function name is spelled the same (case sensitive) in all three files (File.cpp, Class.h, and Class.cpp).
Check that the function is actually declared and defined within <Class> - perhaps you defined it as a member of a different class or perhaps you tried to call the function (in <File>.cpp) using an object or object pointer of a different class.
Check that the number and type of parameters in the function implementation (in <Class>.cpp) matches the number and type of parameters declared in the function declaration in <Class>.h.
Check that the number and type of parameters in the function call (in <File>.cpp) matches the number and type of parameters declared in the function header in <Class>.cpp.
The function was never declared or was declared but never defined. To see if either is the case go to the ClassView window of the Workspace view. Click the + next to <Class> and find <Function> in the list of member functions.
If <Function> is NOT in the list then it was never declared or defined - add a declaration to the class declaraion in <Class>.h and implement the function in <Class>.cpp.
If <Function> is in the list then right click on it and select Go To Definition from the pop-up menu. If you get the error message Cannot find definition (implementation) of this function then the function was declared but never defined (implemented). Implement the function to <Class>.cpp.
LNK2005: <some-long-string-of-mostly-garbage> already defined in <name>.lib(<name>.obj)
This error usually results from including a source code file multiple times. If you recognize any of the names in the message then it probably results from multiple inclusion of one of your own header files. Check to be sure that you've used #ifndef/#define/#endif properly your header files. If you don't recognize the name then it's probably multiple inclusion of a system file (e.g., afxwin.h). Make sure that you haven't explicitly included something in main.cpp that is already included in one of your own header files. Also check that you haven't #i ncluded a .cpp file where you should have #i ncluded a .h file.
http://yinqing.blog.hexun.com/5383739_d.html
作 者:happyparrot 出处:[url]http://community.csdn.net/Expert/topic/4258/4258967.xml?temp=.1825373[/url]
1. Linking...
nafxcwd.lib(thrdcore.obj) : error LNK2001: unresolved external symbol __endthreadex
nafxcwd.lib(thrdcore.obj) : error LNK2001: unresolved external symbol __beginthreadex
libcd.lib(crt0.obj) : error LNK2001: unresolved external symbol _main
Q:
VC++默认的工程设置是单线程的,而你使用了多线程,所以要修改设置。选择菜单“Project|settings”,选择C/C++标签,在CODE GENERATION分类中选择除SINGLE-THREADED的其他选择。
2.fatal error C1010: unexpected end of file while looking for precompiled header directive
Q:
两个办法:
-->肯定是一个新添加的类的.cpp文件开头没包含stdafx.h,在该文件最前面加上即可
-->有时可以使用右键点击项目工程中的该cpp文件,选择setting,在c/c++栏,选择PreCompiled headers,然后设置第一选项,选择不使用预编译头,解决这个问题。
3.在编译时产生的下面的代码,那么下面的代码中的括号内的数字代表什么意思,还有error后的数字呢?
Compiling...
CalWnd.cpp
E:\StudyVC\CalendarApp\CalWnd.cpp(1092) : error C2065: 'TTS_BALLOON' : undeclared identifier
E:\StudyVC\CalendarApp\CalWnd.cpp(1092) : error C2059: syntax error : ')'
E:\StudyVC\CalendarApp\CalWnd.cpp(1092) : warning C4552: '|' : operator has no effect; expected
operator with side-effect
Error executing cl.exe.
Q:括号中的数字是出错的代码行的行号。例如错误中的第1行表示CalWnd.cpp的1092行出现了错误。如果想快速找到这行,可以在错误信息行上双击鼠标,这时VC++会自动打开CalWnd.cpp文件并定位到这行。
Error后面的数字表示错误代号。错误代号分为两类:C开头的是编译错误,即你的代码存在语法错误,你需要修改代码;LNK开头的是链接错误,通常你的代码并没有语法错误,可能是配置错误引起的,但有时LNK可能是由于拼写错误引起的。在错误信息行上按F1键,VC++会打开MSDN帮助并显示关于该错误信息的一个简单的解释,你可以根据该解释来知道到底是什么意思。
4.vc编译的时候可以设置两个版本:debug和release,debug版本在运行的时候点击帮助菜单的about对话框出现如下错误信息:
Debug Assertion Failed:
Program :C:\fuan\Debug\fuan.exe
File:wincore.cpp
Line:628
For information on how your program can cause an assertion failure,see visual c++ documentation on asserts.
(Please retry to debug application).
但是如果把配置改成release版本,就不会出现问题,about对话框弹出正常。使用的是同一个源程序,为什么会出现不同的结果?
Q:
在MFC中,大量使用了ASSERT宏,这些宏通常可以来纠正一些错误,如还没有初始化指针就使用等。你所遇到的信息就是ASSERT宏报告的错误。通常你要检查一下是否存在错误。在Release方法下,ASSERT宏不会执行,所以也没有错误信息。不过,MFC中的ASSERT宏有时管得有点宽,如果确认没有错误,也可以不理会它。
5. 在win2000上能编译的程序到了win98就不能编译了。
没有出错信息,一编译就停在
--Configuration: Monitor - Win32 Release-------
Copying contents file...
是不是跟*.hpj文件有关系,应该怎么改?
Q:是和编译帮助文件有关,据说如果在Win98下安装了Norton AntiVirtus 2000就会出现这种问题。可以把帮助文件从工程中去掉:
1、在FileView标签下,选择Source Files文件夹下面的.hpj文件。
2、右击文件并从菜单中选择Settings。
3、点击General标签。
4、清除掉Always use custom build step选项并选择Exclude file from build。
6.在用EnumWindows(EnumWindowsProc,(LPARAM)0);编译时老是出错:cannot convert parameter 1 from 'int (struct HWND__ *,long)' to 'int (__stdcall *)(struct HWND__ *,long)'
Q:实际上看一下错误信息就知道,你的EnumWindowsProc大概定义为:
int EnumWindowsProc(HWND, long);
实际应该定义为:
int __stdcall EnumWindowsProc(HWND, long);
7.编译以WinMain开头的函数出现LNK2001错误
LIBCD.lib(crt0.obj) : error LNK2001: unresolved external symbol _main
Debug/Cpp1.exe : fatal error LNK1120: 1 unresolved externals
Q:估计是选错了工程类型。在VC中除了可以编译MFC程序外,还可以建立Win32 Application,以WinMain为主函数。可以在VC中建立Win32 Application,然后加入你的C程序,然后编译即可。
8.编译后出现大量错误信息怎么办
错误信息如下:
I
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -