C++ 获得;void*不是指向对象类型的指针;错误,但代码在使用XCode时可以完美执行
当执行下面的代码时,当执行函数更改时,我得到了上面提到的错误。我没有使用任何去引用,也没有在任何地方使用void*。起初我认为这是因为(double*)malloc(..),但即使使用静态内存分配,问题仍然存在。此外,编译器说max_元素不是std::的成员,或者“错误:max_元素未在此范围内声明”C++ 获得;void*不是指向对象类型的指针;错误,但代码在使用XCode时可以完美执行,c++,compiler-errors,void-pointers,C++,Compiler Errors,Void Pointers,当执行下面的代码时,当执行函数更改时,我得到了上面提到的错误。我没有使用任何去引用,也没有在任何地方使用void*。起初我认为这是因为(double*)malloc(..),但即使使用静态内存分配,问题仍然存在。此外,编译器说max_元素不是std::的成员,或者“错误:max_元素未在此范围内声明” #包括 #包括 #包括 #包括 #包括 使用名称空间std; 结构交换{ int nHalf; 第三鸟; int nFourht; 国际货币单位[3]; }; 无效变更(双重n、交换和a); //
#包括
#包括
#包括
#包括
#包括
使用名称空间std;
结构交换{
int nHalf;
第三鸟;
int nFourht;
国际货币单位[3];
};
无效变更(双重n、交换和a);
//程序的主要功能
int main()
{
int i=0;
向量n;
n、 储备(10);
矢量币;
硬币.储备(10);
//n=(双*)malloc(sizeof(双));
做{
cin>>n[i];
零钱(n[i],硬币[i]);
硬币[i]。美元[0]=
硬币[i].nHalf+coin[i].nHird+coin[i].nFourht;
硬币[i].美元[1]=n[i];
硬币[i]。美元[2]=0;
很可能第一个错误是由产生的。尝试用ctgmath
替换它。或者,如果您不需要对复数进行操作,只需使用cmath
好吧,编译器是对的。看起来max\u元素
不是在这个范围内声明的,除非它在其中一个头中。我现在很困惑,不是吗max_元素只是std库中包含的一个成员函数?是的。但是你需要包含
才能得到它。:)而且,它是执行的,所以我猜如果没有声明max_元素,程序将输出错误的答案……我可能缺少一些基本的东西,因为我刚开始使用c++时,也尝试不使用命名空间std;
(特别是在全局范围内)以避免名称冲突。最好明确使用std::
前缀。
#include <iostream>
#include <cmath>
#include <tgmath.h>
#include <vector>
#include <stdio.h>
using namespace std;
struct Exchange{
int nHalf ;
int nThird ;
int nFourht ;
int amDollars[3] ;
};
void change (double n, Exchange& a) ;
// Main function for the program
int main( )
{
int i = 0 ;
vector <int> n ;
n.reserve(10) ;
vector<Exchange>coin ;
coin.reserve(10) ;
// n = (double *) malloc(sizeof(double)) ;
do{
cin >> n[i] ;
change (n[i], coin[i]) ;
coin[i].amDollars[0] =
coin[i].nHalf + coin[i].nThird + coin[i].nFourht ;
coin[i].amDollars[1] = n[i] ;
coin[i].amDollars[2] = 0 ;
cout << *max_element(&coin[i].amDollars[0], &coin[i].amDollars[2]) << endl ;
i++ ;
}while (i < 10) ;
return 0;
}
void change (double n, Exchange& a) {
a.nHalf = trunc(n/2) ;
a.nThird = trunc(n/3) ;
a.nFourht = trunc(n/4) ;
}