为什么我不能用min和max作为变量名? 在这个C++程序中,函数PrtutSnUnS不接受 在switch_函数中调用时,向量数作为实际参数,我希望add_num函数接受向量作为参数,但我认为这会导致相同的错误 注意到,在这个代码中没有提到的错误,但是当我编译这个代码时出现了许多错误和警告,当我将双min改为双minn或双max到双Max时,我举了上述错误,我仍然是C++初学者,所以请解释为什么我不能使用min和max这个词。还有函数print_nums的主要错误和任何其他错误或警告 #include <iostream> #include <vector> #include <climits> #include <cfloat> using namespace std; double mean{}; double min=FLT_MAX; double max=FLT_MIN; vector<double>numbers{}; char select; char list(); void print_nums(vector<double>&numbers); void program_func(); double nums_mean(double); char switch_function(char); void display_nums_mean(double); int main(){ program_func(); return 0; } void program_func(){ while(select!='q'&&select!='Q'){ list(); switch_function(select); } } char list(){ cout<<"Please select an Order\n"; cout<<"***********************\n"; cout<<"P-Print numbers\n"; cout<<"A-Add a number\n"; cout<<"M-Display the numbers mean\n"; cout<<"S-Display smallest number\n"; cout<<"L-Display largest number\n"; cout<<"Q-Quit\n"; cout<<"Order " ; cin>>select; cout<<endl; return select; } void print_nums(const vector <double> &numbers){ if(numbers.size()!=0) for(auto value : numbers) cout<<value<<endl; else cout<<"Array is empty"<<endl; } void add_num(){ cout<<"How many numbers will be added to the list : "; unsigned int num_of_nums; double num; cin>>num_of_nums; cout<<endl; cout<<"add numbers to the list : "; for(unsigned int i=0;i<num_of_nums;i++){ cin>>num; numbers.push_back(num); } return; } double nums_mean(double mean){ double sum{}; for(unsigned int i=0;i<numbers.size();++i){ sum+=numbers.at(i); } mean = sum/(numbers.size()); return mean; } double small_num(double min){ for(unsigned int i=0;i<numbers.size();++i){ if(min>=numbers.at(i)){ min = numbers.at(i); } } return min; } double large_num(double max){ for(unsigned int i=0;i<numbers.size();++i){ if(max<=numbers.at(i)){ max = numbers.at(i); } } return max; } void display_nums_mean(double mean){ cout<<"The mean of the numbers is : "<<mean<<endl; } void display_nums_min(double min){ cout<<"The minimum number is : "<<min<<endl; } void display_nums_max(double max){ cout<<"The maximum number is : "<<max<<endl; return; } char switch_function(char select){ switch(select){ case 'p': case 'P': print_nums(numbers); break; case 'a': case 'A': add_num(); break; case 'm': case 'M': mean=nums_mean(mean); display_nums_mean(mean); break; case 's': case 'S': min=small_num(min); display_nums_min(min); break; case 'l': case 'L': max=large_num(max); display_nums_max(max); break; case 'q': case 'Q': return select; default: cout<<"Please Enter a valid character "<<endl; } return select; }

为什么我不能用min和max作为变量名? 在这个C++程序中,函数PrtutSnUnS不接受 在switch_函数中调用时,向量数作为实际参数,我希望add_num函数接受向量作为参数,但我认为这会导致相同的错误 注意到,在这个代码中没有提到的错误,但是当我编译这个代码时出现了许多错误和警告,当我将双min改为双minn或双max到双Max时,我举了上述错误,我仍然是C++初学者,所以请解释为什么我不能使用min和max这个词。还有函数print_nums的主要错误和任何其他错误或警告 #include <iostream> #include <vector> #include <climits> #include <cfloat> using namespace std; double mean{}; double min=FLT_MAX; double max=FLT_MIN; vector<double>numbers{}; char select; char list(); void print_nums(vector<double>&numbers); void program_func(); double nums_mean(double); char switch_function(char); void display_nums_mean(double); int main(){ program_func(); return 0; } void program_func(){ while(select!='q'&&select!='Q'){ list(); switch_function(select); } } char list(){ cout<<"Please select an Order\n"; cout<<"***********************\n"; cout<<"P-Print numbers\n"; cout<<"A-Add a number\n"; cout<<"M-Display the numbers mean\n"; cout<<"S-Display smallest number\n"; cout<<"L-Display largest number\n"; cout<<"Q-Quit\n"; cout<<"Order " ; cin>>select; cout<<endl; return select; } void print_nums(const vector <double> &numbers){ if(numbers.size()!=0) for(auto value : numbers) cout<<value<<endl; else cout<<"Array is empty"<<endl; } void add_num(){ cout<<"How many numbers will be added to the list : "; unsigned int num_of_nums; double num; cin>>num_of_nums; cout<<endl; cout<<"add numbers to the list : "; for(unsigned int i=0;i<num_of_nums;i++){ cin>>num; numbers.push_back(num); } return; } double nums_mean(double mean){ double sum{}; for(unsigned int i=0;i<numbers.size();++i){ sum+=numbers.at(i); } mean = sum/(numbers.size()); return mean; } double small_num(double min){ for(unsigned int i=0;i<numbers.size();++i){ if(min>=numbers.at(i)){ min = numbers.at(i); } } return min; } double large_num(double max){ for(unsigned int i=0;i<numbers.size();++i){ if(max<=numbers.at(i)){ max = numbers.at(i); } } return max; } void display_nums_mean(double mean){ cout<<"The mean of the numbers is : "<<mean<<endl; } void display_nums_min(double min){ cout<<"The minimum number is : "<<min<<endl; } void display_nums_max(double max){ cout<<"The maximum number is : "<<max<<endl; return; } char switch_function(char select){ switch(select){ case 'p': case 'P': print_nums(numbers); break; case 'a': case 'A': add_num(); break; case 'm': case 'M': mean=nums_mean(mean); display_nums_mean(mean); break; case 's': case 'S': min=small_num(min); display_nums_min(min); break; case 'l': case 'L': max=large_num(max); display_nums_max(max); break; case 'q': case 'Q': return select; default: cout<<"Please Enter a valid character "<<endl; } return select; },c++,C++,使用名称空间std;摆脱这个习惯,这意味着std::min和std::max从std名称空间拉入全局名称空间。这就是为什么您不能在自己的代码中使用这些名称,因为它们已经被定义了 我仍然是C++初学者,请解释为什么我不能用“min”和“max”这个词。p> 你可以 下面的第一节用最少的代码演示了正在发生的事情 第二节显示了下面的“解决方案” 奖金第三节用C++类解决。 1两种编码选择中的第一种是[MCVE],您应该认识到它的起源,它会重新产生歧义,从而导致错误 // this first sect

使用名称空间std;摆脱这个习惯,这意味着std::min和std::max从std名称空间拉入全局名称空间。这就是为什么您不能在自己的代码中使用这些名称,因为它们已经被定义了

我仍然是C++初学者,请解释为什么我不能用“min”和“max”这个词。p> 你可以

下面的第一节用最少的代码演示了正在发生的事情

第二节显示了下面的“解决方案”

奖金第三节用C++类解决。 1两种编码选择中的第一种是[MCVE],您应该认识到它的起源,它会重新产生歧义,从而导致错误

// this first section matches your code, 
#include <iostream>
#include <vector>
#include <climits>
#include <cfloat>

using namespace std;    
// this 'using' pulls a 'min' and 'max' (probably functions) 
//   from some std:: declaration 

double min  = FLT_MAX; 
double max  = FLT_MIN;
// ----^^^----  and now these 2 items create two ambiguity's because 
// at this point, the compiler can no longer distinguish 
// between the two min's (or max's).

void program_func(int argc, char* argv[]) {
   std::cout << "\n  " << argc
             << "  "   << argv[0]
             << "\n  " << min  // error: reference to ‘min’ is ambiguous
             << "  "   << max  // error: reference to ‘max’ is ambiguous
             << std::endl;
}    
int main(int argc, char* argv[]) {
   program_func();
   return 0;
}
2出于您的考虑,另一个尚未提及的解决MCVE形式中您的困境的“解决方案”是将您的代码尽可能简单地移动到一个“独特的”名称空间中。此操作可以很容易地完成:

#include <iostream>
#include <vector>
#include <climits>
#include <cfloat>

using namespace std;    
// this 'using' pulls a 'min' and 'max' (probably functions) 
//   from some std:: declaration (as previous)


// now place all of **your** code (except main()) into a distinguishing namespace. 


namespace AZ // (your initials, if you are not already using them ;)
{
   double min  = FLT_MAX;  // these are now AZ::min
   double max  = FLT_MIN;  //           and AZ::max - unambiguous!

   void program_func(int argc, char* argv[])
   {
      std::cout << "\n  " << argc
                << "  "   << argv[0]
                << "\n\n  " << min  // reference to AV::min
                << "  "     << max  //    and       AV::max
                << std::endl;
   }

}  // namespace AZ end 

int main(int argc, char* argv[])
{
   AZ::program_func(argc, argv);  // NOTE AZ:: namespace qualifier!
   return 0;
}
本节编译并运行时没有错误

符号不再“冲突”,且AZ::min和AZ::max相对于std::min和std::max是唯一的且可区分的

注1:这应该足以促使您选择不使用行:using namespace std

注2:如果使用名称空间std;,保留行;,不要把它放在你的名字空间包装器里面

是-仍然可以访问std::,在您独特的名称空间中,它们被称为std::min和std::max

函数print_nums的主要错误

也许还有第二个值得提出的问题。在MCVE上工作,并使用SO工具进行练习。你可以通过提问获得积分,而反对票则是要求你进行更多练习的投稿人

我想向你们强调mcve的重要性。“print_nums”错误是否与第一个问题有关

以及任何其他错误或警告

#include <iostream>
#include <vector>
#include <climits>
#include <cfloat>
using namespace std;
double mean{};
    double min=FLT_MAX;
    double max=FLT_MIN;
vector<double>numbers{};
char select;
char list();
void print_nums(vector<double>&numbers);
void program_func();
double nums_mean(double);
char switch_function(char);
void display_nums_mean(double);
int main(){


   program_func();


        return 0;
}
void program_func(){
    while(select!='q'&&select!='Q'){
       list();
  switch_function(select);

        }
    }
char list(){
     cout<<"Please select an Order\n";
        cout<<"***********************\n";
        cout<<"P-Print numbers\n";
        cout<<"A-Add a number\n";
        cout<<"M-Display the numbers mean\n";
        cout<<"S-Display smallest number\n";
        cout<<"L-Display largest number\n";
        cout<<"Q-Quit\n";
        cout<<"Order " ;
        cin>>select;
        cout<<endl;
    return select;

    }
void print_nums(const vector <double> &numbers){
    if(numbers.size()!=0)
     for(auto value : numbers)
              cout<<value<<endl;
            else
                cout<<"Array is empty"<<endl;

    }
void add_num(){
        cout<<"How many numbers will be added to the list : ";
        unsigned int num_of_nums;
        double num;
        cin>>num_of_nums;
        cout<<endl;
        cout<<"add numbers to the list : ";
        for(unsigned int i=0;i<num_of_nums;i++){
            cin>>num;
            numbers.push_back(num);
            }
        return;
        }
double nums_mean(double mean){
    double sum{};
    for(unsigned int i=0;i<numbers.size();++i){
        sum+=numbers.at(i);

        }
    mean = sum/(numbers.size());


    return mean;


    }
double small_num(double min){
    for(unsigned int i=0;i<numbers.size();++i){

                if(min>=numbers.at(i)){

                    min = numbers.at(i);
                    }

            }
            return min;
    }
double large_num(double max){
    for(unsigned int i=0;i<numbers.size();++i){
                if(max<=numbers.at(i)){

                    max = numbers.at(i);
                }

            }
            return max;

    }
void display_nums_mean(double mean){
    cout<<"The mean of the numbers is : "<<mean<<endl;


    }
void display_nums_min(double min){
    cout<<"The minimum number is : "<<min<<endl;

    }
void display_nums_max(double max){
    cout<<"The maximum number is : "<<max<<endl;
    return;
    }
char switch_function(char select){
    switch(select){
        case 'p':
        case 'P':
                 print_nums(numbers);
                 break;
        case 'a':
        case 'A':
                 add_num();
                 break;
        case 'm':
        case 'M':
                 mean=nums_mean(mean);
                 display_nums_mean(mean);
                 break;
        case 's':
        case 'S':
                 min=small_num(min);
                display_nums_min(min);
                 break;
        case 'l':
        case 'L':
                 max=large_num(max);
                 display_nums_max(max);
                 break;
        case 'q':
        case 'Q':
         return select;
        default:
         cout<<"Please Enter a valid character "<<endl;


    }

    return select;   
    }
通常,“帮助调试我的代码”不适用于此网站

3对于您的困境,另一个尚未提及的“解决方案”是将您的代码尽可能简单地移动到一个“与众不同”的类中

您已经将此代码标记为C++。IHO,C++的主要特点是类。因此,我建议初学者把精力集中在创建和使用类上,并学习提供的库“Vector >、、IoString >、等。我还建议避免用C类C++编写C风格代码,这种早期训练是打破任何误导习惯的时候。 使用区分类:

#include <iostream>
#include <vector>
#include <climits>
#include <cfloat>

using namespace std;    

class AZ_t // suffix '_t' because a class defines a type
{
   double min  = FLT_MAX;  // these are now AZ_t::min
   double max  = FLT_MIN;  //           and AZ_t::max - unambiguous!

   int program_func(int argc, char* argv[])
   {
      std::cout << "\n  " << argc
                << "  "   << argv[0]
                << "\n\n  " << min  // reference to AZ_t::min
                << "  "     << max  //    and       AZ_t::max
                << std::endl;
   }

   // NOTE3 - see below

 public: // above this statement is private
   // a functor is easy to use, but it needs one more function:

   int operator()(int argc, char* argv[]) { 
       return program_func(argc, argv);   
   }

};  // class AZ end 

int main(int argc, char* argv[]) // main is now 1/2 the size
{
   return AZ_t()(argc, argv);   // because this functor is a 1 liner!
   //           ^^^^^^^^^^^^ -- parameter to operator() 
   //     ^^^^^^ -- instance ctor  (constructor)
   // ^^^ -- operator() returns int
   // instance dtor (destructor) runs when 1 liner is complete
}
本节编译并运行时没有错误

注3:此时,类AZ_t是其余代码的位置。“在类中”编码的一个好处是不需要函数转发。你的帖子大约有6个转发-c风格代码的证据只是以编译器计算出的任何顺序呈现函数,但我建议你尝试使用最可读的序列。

使用名称空间std的行表示你包含了std名称空间。通过包含此名称空间,您将在该名称空间中包含许多函数和变量

使用任何变量时,如果命名空间std中存在同名的变量,则该变量将与其绑定。现在,通过在代码中声明另一个变量,编译器会混淆编码器所指的是哪一个变量

尝试为变量max_num和min_num使用更有意义的名称。
如果仍要使用max和min,请在用户定义的命名空间中声明它们,并在代码中引用它们。

const vector&与vector不一样&为什么要用FLT\u max初始化double?还有一个DBL_MAX。@DeiDei我不知道:我原以为只有FLT_MAX,但在使用名称空间std时仍然出现错误;摆脱这个习惯,这意味着std::min和std::max从std名称空间拉入全局名称空间。@Rakete1111:我不同意重复的说法。您所链接的问题非常笼统,初学者几乎不可能在27个答案中找到这个特定的问题。有两个共同的原因,为什么Min和Max特别是C++中的常见问题,而且其中只有一个甚至在这些答案中被描述。
ing下一个关于原始问题的投诉。这是原始问题的适当过程,以及为什么它已经关闭。你的答案并不能解决代码中的所有问题。@πάνταῥεῖ 我没有试图修复代码中的所有问题。我只是想回答为什么不能用min和max作为变量名的原始问题?。一次解决一个问题。