【问题标题】:C++ Error I need help please?C++ 错误 我需要帮助吗?
【发布时间】:2016-02-11 18:40:35
【问题描述】:

我已经编写了一个代码,该代码必须编写一个数学函数,然后给出图像。首先,将函数作为字符串变量引入,但不知道如何将其转换为另一种类型的变量以返回函数的图像。

我得到的编译器错误是:

无法将参数“1”的“std::string {aka std::basic_string<char>}”转换为“const char*”到“int printf(const char*, ...)

#include<iostream> 
#include<cmath> 
#include<math.h> 
#include<vector> 
#include<stdio.h> 
#include<iomanip> //setprecision// 
#include<sstream> 
#include<string> 
#define precisio 4 
#define K 100   
using namespace std;  
double valors(double a, double b);  
double g(double x);  
double x; 
double a = x; 
double y(x); 
int i;    
int main () {       
  cout << setprecision(precisio);   
  cout << "Escriu l'interval de la funció" << endl;         
  double a, b;      
  cout << "\n a =";     cin >> a;       
  cout << "\n b =";     cin >> b;       
  cout << "Escriu la funcio" << endl;   string s;   
  cin >> s;     cout << s;      
  double y = printf(s.c_str());         
  valors(a,b); 
}  

double valors(double a, double b){          
  int punts = K*(b-a) + 1;      
  double amplada = (b-a)/K;         
  cout << "\n\tx\tf(x)" << endl;        

  for (int i = 0; i < punts; i++) {                 
    cout << "\t" << a << "\t" << g(a) << endl;      
    a = a + amplada;    
  }     
}

double g(double x){
   return y; 
}

【问题讨论】:

  • 你为什么要这样做:double y = printf(s.c_str()); 什么时候可以像上面几行一样使用cout &lt;&lt; s;
  • 使用调试器将有助于澄清问题。这是学习使用调试器的一个很好的例子。
  • 此代码无需任何编辑即可编译和运行。无论问题是什么,它要么不在此代码中,要么不是所要求的。
  • 没有其他人看到 valors() 缺少的回报? O.o
  • edit 将您的代码简化为minimal reproducible example 的问题。您当前的代码包含许多与您的问题无关的内容 - 一个最小样本通常看起来类似于一个好的单元测试:只执行一项任务,并为可重复性指定输入值。

标签: c++ c++11 visual-c++ dev-c++ visual-c++-2010


【解决方案1】:

这个使用 C++14 的在线编译器没有问题:here

#include<iostream>
#include<stdio.h>
#include<iomanip> //setprecision//
#include<sstream>
#include<string>
#define precisio 4
#define K 100
using namespace std;
double valors(double a, double b);
double g(double x);
double x;
double a = x;
double y(x);
int i;
int main()
{
    cout << setprecision(precisio);
    cout << "Escriu l'interval de la funció" << endl;
    double a, b;
    cout << "\n a =";
    cin >> a;
    cout << "\n b =";
    cin >> b;
    cout << "Escriu la funcio" << endl;
    string s;
    cin >> s;
    cout << s;
    double y = printf(s.c_str());
    valors(a, b);
}

double valors(double a, double b)
{
    int punts = K * (b - a) + 1;
    double amplada = (b - a) / K;
    cout << "\n\tx\tf(x)" << endl;

    for (int i = 0; i < punts; i++)
    {
        cout << "\t" << a << "\t" << g(a) << endl;
        a = a + amplada;
    }
}
double g(double x)
{
    return y;
}

【讨论】:

  • 大声笑你没有包括 ;-;
  • @Kostas Lifeboy,它就在 IdeOne。它不只是在这里的代码文本中。
  • LOL 我刚试了一下,并没有抛出任何错误 O.o 太棒了! :D
  • 提高警告级别。我用-pedantic -pedantic-errors -Wall -Wextra -Werror
【解决方案2】:

我假设的目的是:

cin >> s;   cout << s;
double y = printf(s.c_str());

是将用户在标准输入中输入的值放入 y 中。如果是这样,你应该这样做:

cin &gt;&gt; y;

【讨论】:

    【解决方案3】:
    double valors(double a, double b)
    

    您的函数不返回任何值,但它应该返回“double”。

    【讨论】:

    • 这是我遇到的唯一编译错误,而且似乎只有 VS 将其视为错误。
    猜你喜欢
    • 2011-09-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-11
    • 2018-12-30
    • 1970-01-01
    相关资源
    最近更新 更多