Проблемы с доступом к функциям из других файлов в C ++

0

Я только начал изучать c++, и сейчас я пытаюсь использовать объектно-ориентированное программирование. Я прочитал из других статей, что мне нужно создать класс заголовка для файла с функцией и включить его во все файлы с помощью этой функции. Однако всякий раз, когда я пытаюсь поместить функцию в пробелы кода, но она не работает должным образом. Моя функция использует метод sqrt для math.h, чтобы квадратный корень вводить число I. Я знаю, что могу просто использовать это в main(), но я хотел проверить OOP. Когда я использую sqrt в основном методе, который работает моя программа, но когда я помещаю его в другой файл, моя программа выплескивает тот же номер, который я вставляю. Heres my Code

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. Помощь будет принята с благодарностью. благодаря

  • 1
    Вы не создаете класс, и это не объектно-ориентированное программирование. Вы создаете функцию, которая квалифицируется как процедурное программирование, и, поскольку она находится в отдельном файле или модуле компиляции, модульное программирование.
  • 1
    Из какой книги по С ++ ты учишься?
Показать ещё 3 комментария
Теги:
debugging

5 ответов

5

Моя функция использует метод sqrt для math.h, чтобы квадратный корень вводить число I.

Нет, нет.

Он объявляет 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);

Вам также следует знать, что это не объектно-ориентированное программирование.

  • 0
    Я тоже так думал, но Visual Studio сообщает, что более чем один экземпляр перегруженной функции sqrt соответствует списку аргументов.
  • 1
    @ user3144018: Это не причина нарушать ваш синтаксис до такой степени, что вы вообще не вызываете sqrt ; это причина, чтобы исследовать эту проблему самостоятельно. Программирование угадыванием не работает!
Показать ещё 2 комментария
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() возвращает значение возвращаемого вами значения.

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++ код, который я мог бы придумать для ваших требований. Пройдите комментарии выше, они ценны с точки зрения понимания.

0

Вы не используете результат function. Попробуйте x = function1(x); или cout << function1(x); ,

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;
}

Надеюсь, я помог!

  • 0
    Нет, он вообще не звонит в sqrt !
  • 0
    Правильно, я отредактирую свой ответ. Спасибо что подметил это.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню