class遇到的问题
成员方法调用成员函数
int distance = (center.getx() - c1.getx()) * (center.getx() - c1.getx()) + (center.gety() - c1.gety()) * (center.gety() - c1.gety());
此处 center.getx();center.gety()要注意不能缺少()
用成员函数获取private中成员属性时,遇到的错误
严重性 代码 说明 项目 文件 行 禁止显示状态 错误 C2659 “=”: 作为左操作数 点和圆 C:\Users\张豪\source\repos\点和圆\Circle.cpp 5
void Circle::setcenter(int x1,int y1)
{
center.setx(x1);//不能写成 center.getx=x1;
center.sety(y1);//不能写成 center.gety=y1;
}
不能给获取private中x的成员函数 getx()赋值,也不要return 这个!!
c++调用c语言
c++ 和 c 函数名字在编译时 会有不同
使用场景
1、 由于系统内核一般是使用C语言来编写的,系统内核中用C语言实现了很多库。而上层应用程序有可能是用C++来开发,如果在内核库函数头文件中不用extern “C”来声明库函数的话,在编写C++应用程序时,包含库头文件,在C++文件链接时就会以C++标准来链接库的函数名,而在库文件实现时是用C来实现的,二者函数名不同,在链接时就会出现找不到函数的现象。
2、 在有些工程中,即包含.c文件有包含.cpp文件,如VC的工程。.cpp文件要调用.c文件中的函数时,需要extern “C” 声明.c文件中的函数,在CPP文件中让C++编译器使用C的标准来链接C文件中的函数
extern “C”放在函数声明前的作用
用(extern “C”+函数声明),表明CPP此文件中的函数,以C的标准来链接(“_函数名”), 如果在CPP文件中函数声明前不用extern “C”,则采用C++的标准来链接(比如函数名为”?c_main2@@YAXHHH@Z”)。
extern “C”放在函数定义前的作用
如果extern “C”放在函数定义之前,则C++编译器使得函数按照C的标准来编译和链接函数。
常用做法
在编写C代码的同时,为了可以被C++程序调用,通常会在C源代码对应的头文件中加入
#ifdef __cplusplus
extern "C" {
#endif
extern void c_main(); //外部函数接口声明c语言中函数声明
#ifdef __cplusplus
}
#endif
当extern “C”的场合是当C程序调用C++的东西时:
-
在C++的.h文件中用extern “C”{}声明将被C程序使用的函数
-
在C++的.cpp文件中实现上面的函数
-
在.c文件中用extern声明要使用的C++函数
-
使用即可
注意:切不可在.c文件中包含C++的.h文件,那样编译无法通过
CPPClass.h
#ifndef __CPPClass_H__
#define __CPPClass_H__
extern "C"
{
int add(int a, int b) ;
};
#endif // end __CPPClass_H_
CPPClass.cpp
#include "CPPClass.h"
int add(int a, int b)
{
return a + b ;
}
main.c
#include <stdio.h>
//#include "CPPClass.h" // 不要包含头文件,否则编译不过
extern int add(int a, int b) ; // 只需显示声明要调用的函数即可
int main(void)
{
int result = add(1, 2) ; //使用函数
printf("%d", result) ;
return 0 ;
}