c++ 中文 编译 错
2012-10-30 08:59:40 Michyo 阅读数 1794

每次都能被各种错给弄抓狂=-=,真是受不了。。索性来个集锦吧。


1、Error:No viable conversion from '__bind<int &, sockaddr *, unsigned long>' to 'int'

源码:

int localSocket,remoteSocket;
struct sockaddr_in  localAddr;
int result = bind(localSocket, (struct sockaddr *)&localAddr,sizeof(localAddr));

分析:

觉得应该没什么错才对的嘛,函数的各个类型也都完全符合,觉得非常纠结,遂上网一查,发现是因为运用了using namespace std;来强制运用了标准库里面的名字空间,而在标准名字空间里也有一个函数叫bind(),所以就被先匹配了,而我想用的sys/socket里的bind()没有被匹配到。

解决方案:

将bind函数声明到全局域,即作以下更改:

int result = ::bind(localSocket, (struct sockaddr *)&localAddr,sizeof(localAddr));



2016-03-22 20:05:00 weixin_34187862 阅读数 10

1、可访问性(是否可用)、可见性(作用域内是否存在)

2、volatile(嵌入式用的多) const

3、友元函数可以访问类的私有函数 目的 工厂方法 全局运算符 如 >> << () ||

4、static const 类定义时即可初始化

5、复制构造函数 赋值运算符 目地 复杂类型、指针类型的复制

6、转换构造函数 一个参数的构造函数

7、explicit 防止隐式类型

8、 const  在函数前则返回值是const的,在函数后,则函数里的值不可变,如果有修改变量,可以在这个变量的声明出加mutable

9、命名规范 

空行 {} 就近原则

分号后可以加空格 二元操作符的空格 前后都加,一元操作符可以不用

拆行时 操作符放在行首 *&紧靠变量名

10、c++ new分配的在堆,其它的在栈

11、c++ 宏用”#”号连接

12、++在后面时返回原时值,循环的表达式里有取余,或类似操作时要注意

13、取余要注意负数问题

14、左值是一个位置,右值是一个值

15、有符号数的右移位 不是可移植的

16、变量名与内存位置之间的关联并不是硬件提供,由编译器实现。硬件仍然通过地址访问内存位置

17、c语言只有传值方式,所以要用指针的指针

18、指针的初始化用&操作符,变量的值就是分配给变量的内存位置所存储的数值

19、访问指针地址所指内容 可以间接访问,或用解引用指针 *

20、segmentation violateion / memory falut  指针未初始化 gpf 一般保护性异常 bus error 总线错误 指针超边界

21、访问内存地址 *(int *)100 = 25 内存100地址处的值设为25

22、状态码和错误码分开

23、逻辑上可以处理的异常用错误码,否则抛出异常

24、初始化的先后顺序

25、stl set 一般用来保存不可变的元素,在vs2010以上版本里 setiterator都是const

26、某个数x的后i位  x%(10^i)

27、链式调用时要检查每一项的值是否存在

28、function argument expected 可能是函数名后没见()

29、无符号数减始终是无符号数,用a-b>0 来判断始终为真

30、malformer number near 非英文字符

31、unexpected symbol near “=”  结果是a=b后面一大段空白之后又跟着一个 =b

32、把一行过长的代码切割成多行,方便查错

2018-12-08 15:24:59 lyw736632087 阅读数 15

1.new T()代表创建一个T类的对象指针,new T[]标识创建T类对象数组指针。

2.template模板类只能把成员函数都定义在.h中,分开.h和.cpp会报链接错误。

3.类A:的成员变量包含B的对象B b,则A的构造函数中需调用B的构造函数:

A::A():b(8) {

......

}

2016-06-05 20:53:48 leonhe27 阅读数 427

1、数组在作为函数参数传递的时候,就退化为指针了,这个时候无论是sizeof(array)还是sizeof(*array)得到的都只能是这个指针指的一个元素所占的字节数目(4),而不能得到数组的长度!!


2、vector类型作为函数参数传递的时候,是在进行复制,实际上的顺序并不会改变,而数组类型作为函数参数只能传递首指针,这个时候在函数中进行的操作实际会影响数组本身,这个时候,一般要先进行一次复制,再来进行操作。


3、注意模板类和模板函数都只能包含在h文件中,而不能在cpp文件中!


4、

#ifndef GUARD_median_h
#define GUARD_median_h

#include <iostream>
#include <algorithm>   
#include <stdexcept>  
#include <cstdlib>
	

using std::domain_error;

template <class DATA,class SIZE>
DATA median(<strong>DATA* ptr</strong>, SIZE size)//注意如何设参数的技巧
{
	if (size == 0)
		throw domain_error("Median of an empty vector");

	DATA *arr = <strong>new DATA[size]</strong>;/*以前在c中常常遇到希望可以动态调整数组元素个数,在c++中可以用new来实现!
注意,不能用如同arr[n]这种来定义,因为c与c++均要求数组元素个数是常量!所以要提高使用new(用来动态分配内存)的敏感性!*/
	memcpy(arr, ptr, <strong>size*sizeof(DATA)</strong>);/*注意memcpy函数是用来赋值整块内存里面的内容的,故第三个参数的大小一定是实际所占用的内存的大小(
要乘上每个元素的大小,而非仅仅只是元素的个数!!!(此时如果忘记乘上那个元素所占的内存,一般会出现很奇怪的数字。正如此,在出现很奇怪的数字的时候,
考虑是否忘记考虑元素所占的内存*/
	
	sort(arr, arr + size);

	SIZE mid = size / 2;
	
	DATA median = size % 2 == 0 ? (arr[mid] + arr[mid - 1]) / 2 : arr[mid];
	
	delete[] arr;//注意语法,有new就要有delete,养成好习惯!

	return median;
}

#endif
5、如果定义时候,进行了如int a(b);这种操作,实际上后续操作针对的其实是b。


6.error 4996的解决方法:#pragma warning(disable : 4996)

2012-10-18 17:00:28 RSwky1220 阅读数 610
  1. *上机内容:输入年、月,输出本月多少天  
    *  
    *上机目的:合理选择分支语句  
    *  
    /*         
          
    * Copyright (c) 2012, 烟台大学计算机学院        
          
    * All rights reserved.         
          
    * 文件名称:test.cpp         
          
    * 作 者: 王锴英        
          
    * 完成日期:2012 年 10月25日         
          
    * 版 本 号:v1.0         
          
    * 对任务及求解方法的描述部分:   略   
          
    * 输入描述:某某年、某某月        
          
    * 问题描述:无        
          
    * 程序输出:2004年2月份 共有29天        
          
    * 问题分析:略        
          
    * 算法设计:略  
    */  
      
    * 我的程序:  
    
    
    #include <iostream>
    using namespace std;
    int main()
    {
     int a=3.6,b=2,c;
     c=a%b;
     cout<<c<<endl;
    return 0;
    }

    
    运行结果:  

35.

int改为double,“%”改为“/”时:  

#include <iostream>
using namespace std;
int main()
{
 double a=3.6,b=2,c;
 c=a/b;
 cout<<c<<endl;
return 0;
}


运行结果:

当把b的值改为0时  ,

#include <iostream>
using namespace std;
int main()
{
 double a=3.6,b=0,c;
 c=a/b;
 cout<<c<<endl;
return 0;
}


运行结果:

显然,程序错误,分母不能等于0.  

观察体会:  

当数值型为int型时,用“%”是错误的。  

同理,double不能与“/”同用。

我的体会:c++语言还要我们继续钻研,有自己的热情,完成编程的工作!  

 

 

C++调错技巧

阅读数 291

在C++中经常遇到语法上没有任何错误,但是提示有错的情况出现这种情况有以下几种可能for循环里面的下标变量名写错变量名跟下标变量名重名

博文 来自: Ts_Coo

C++程序调错

阅读数 9

MSVCRTD.lib(crtexew.obj):errorLNK2019:无法解析的外部符号_WinMain@16参考这个:就可以https://blog.csdn.net/shenziheng1/article/details/53188168

博文 来自: weixin_42053726

C++编译

阅读数 23

关于导出Mac下第一种方式:__attribute__((visibility(“default”)))__attribute__((visibility(“hidden”)))第二种方式:#pragmaGCCvisibilitypush(default)#pragmaGCCvisibilitypop第三种方式:(未验证)编译添加-fvisibilityLinux下...

博文 来自: dadan1314

C++编译

阅读数 140

一个cpp文件执行g++命令编译得到out文件可以分解为4个步骤:预处理(Prepressing)编译(Compilation)汇编(Assembly)链接(Linking)编译与链接预处理g++-Etest.cpp-ohelloworld.i-E表示只执行到预编译,直接输出预编译结果预编译的主要处理以#开始的预编译指令,规则如下:将所有的#define删除,并且展开所

博文 来自: u011391629

c++编译

阅读数 86

Linux下编译c++参考Linux系统下C程序开发详解参考CompilingCpp为了测试,在’root’目录下新建一个文件夹text$mkdirtext然后进入文件夹$cdtext新建a.cpp和a.h两个文件,实现“helloword”输出。a.cpp#include"a.h"intmain(){Aa;...

博文 来自: kuguadaoren
没有更多推荐了,返回首页