无法从C ++中的其他文件访问函数

时间:2013-12-30 02:48:47

标签: c++ debugging

我刚开始学习c ++,现在我正在尝试使用面向对象的编程。我从其他文章中读到,我需要使用该函数为该文件创建一个头类,并将其包含在使用该函数的所有文件中。但是,每当我尝试将函数放入代码运行时,它都无法正常运行。我的函数使用math.h的sqrt方法将我输入的数字平方根。我知道我可以在main()中使用它,但我想测试OOP。当我在main方法中使用sqrt时,我的程序可以工作,但是当我把它放在另一个文件中时,我的程序会输出相同的数字。 继承我的代码

Source.cpp

#include <iostream>
#include "Source2.h"




int main(){
    using namespace std;
    cout << "Please enter the number you want to root." << endl;
    int x;
    cin >> x;
    function1(x);
    cout << x;

}  

Source2.cpp

#include <math.h>

int function1(int n){
int sqrt(n);
return n;
}

Source2.h

#ifndef _SOURCE2_H
#define _SOURCE2_H

int function1(int n);

#endif

这段代码的工作原理并非如此。所以你可以称之为我的错误。如果你输入一个像4这样的数字我的程序应该给出2的平方根。 非常感谢帮助。 感谢

5 个答案:

答案 0 :(得分:5)

  

我的函数使用math.h的sqrt方法将我输入的数字平方根。

不,它没有。

它声明int名为sqrt,初始化为n,然后立即忽略此新int

int sqrt(n);   // this is the same as `int sqrt = n;`
return n;

你的意思是:

return sqrt(n);

因此,这与“其他文件”或类似内容无关:由于语法错误,您实际上无法实际调用sqrt


同样,当您致电function1时,您不会对结果做任何事情。

function1(x);

而不是这样,写:

x = function1(x);

您还应该知道这是而不是面向对象的编程。

答案 1 :(得分:2)

在这个例子中,这不是真正的面向对象编程,但这应该修复函数:

int function1(int n){
    n = sqrt(n);
    return n;
}

sqrt RETURNS一个值,它不会修改传入的值,因此您需要将该值存储在某处。我选择在这里重复使用n

主要:

int main(){
    using namespace std;
    cout << "Please enter the number you want to root." << endl;
    int x;
    cin >> x;
    x = function1(x);
    cout << x;

} 

同样,function1()返回一个值,因此需要存储。目前所有main()都会将输入值反馈给您。

答案 2 :(得分:0)

您实际上并未使用function的结果。试试x = function1(x);cout << function1(x);

答案 3 :(得分:0)

你遇到的问题是你没有调用sqrt(n)。 sqrt的文档在这里:http://www.cplusplus.com/reference/cmath/sqrt/

基本上你在Source2.cpp中所做的事情被称为sqrt(n),但没有任何东西可以捕获返回值。你想要做的是:

int function1(int n)
{
    int result = sqrt(n);

    return result;
}

我希望我帮忙!

答案 4 :(得分:0)

这应该有效,

source2.h

#ifndef _SOURCE2_H
#define _SOURCE2_H

#include <math.h>

// Class Definition - Object Oriented Programming
class MyClass
{

public:
    // Function Definition - Get the Sqrt
    double function1(double n);

};

#endif

source2.cpp

#include "source2.h"

// Referencing the function inside the class
double MyClass :: function1(double n){
    double a = sqrt(n);
    return a;
}

source.cpp

#include <iostream>
#include "Source2.h"

using namespace std;

int main(){

    int x;
    cout << "Please enter the number you want to root." << endl;
    cin >> x;
    cout << "The number entered is " << x << " And the sq rt of the same is "; 
    MyClass c;      // Create an instance of MyClass , OOPS
    cout << c.function1(x); 
    return 0;   // Success Condition
}  

随时问我任何问题,这是我能想到的最低限度的C ++代码。通过上述评论,从理解的角度来看,它们是有价值的。