Как вызвать функцию из отдельного файла .cpp?

Итак, вот оригинальный вопрос, который я пытаюсь решить;

* Создайте проект под названием Lab5_Figures. Этот проект должен содержать несколько файлов. Напишите программу, которая неоднократно просит пользователя выбрать квадратный, левый или правый треугольник, затем вводит размер фигуры и затем печатает соответствующую фигуру в звездах. Для квадрата программа должна спросить, хочет ли пользователь заполненный или пустой квадрат. Программа должна выйти, если пользователь вводит неверную опцию. Смотрите пример диалога ниже:

  1. площадь
  2. нижний левый треугольник
  3. верхний правый треугольник

выберите рисунок: 1

выберите размер: 4

заполненный или полый [ф / ч]: ч

// распечатать соответствующую фигуру и повторить

  1. площадь
  2. нижний левый треугольник
  3. верхний правый треугольник

Вы можете повторно использовать свой код из лаборатории Looping (я уже сделал это). Поместите звездообразный код в четыре отдельные функции: заполненный квадрат, полый квадрат, левый треугольник и правый треугольник. Каждая функция должна принимать один целочисленный параметр — размер фигуры и не возвращать значения (быть void-функцией). Создайте три отдельных файла figure.cpp, figure.h и figureInput.cpp. Поместите определения функций треугольника и квадрата в figure.cpp и их прототипы в figure.h. Убедитесь, что заголовочный файл защищен от многократного включения. Поместите основную функцию в figureInput.cpp *.

Хорошо. Теперь вот мои файлы; (Я извиняюсь, если мое форматирование выключено :()

figuresInput.cpp

// This program creates shapes based on user input#include <iostream>
#include <string>
#include "figures.h"
using std::cin; using std::cout; using std::string; using std::endl;

int main()
{
int option = 1;

while (option == 1 || option == 2 || option == 3)
{
//determine choice
cout << "1. Square" << endl << "2. Left Triangle" << endl << "3. Right Triangle" << endl;
cout << "Select an option: ";

cin >> option;

if (option == 1)
{
char fillHollow;

cout << "Filled or hollow? [f/h]";
cin >> fillHollow;

if (fillHollow == 'f')
{
int size;

cout << "Input Size: ";
cin >> size;

void filledSquare(int size);
}

else if (fillHollow = 'h')
{
int size;

cout << "Input Size: ";
cin >> size;

void hollowSquare(int size);
}
}

else if (option == 2)
{
int size;

cout << "Input Size: ";
cin >> size;

void leftTriangle(int size);
}

else if (option == 3)
{
int size;

cout << "Input Size: ";
cin >> size;

void rightTriangle(int size);
}

else
exit(EXIT_FAILURE);
}
} //end main

figures.cpp

//function defintions

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

using std::cin; using std::cout; using std::string; using std::endl;

void filledSquare(int a)
{
//print stars for first square
for (int b = 0; b < a; b++)
{
for (int c = 0; c < a; c++)
cout << "*";
cout << endl; //new line
}
cout << endl; //new line

} //end

void hollowSquare(int a)
{
for (int b = 0; b < a; b++)
{
int spaces = a - 2;
if (b == 0 || b == (a - 1))
{
for (int i = 0; i < a; i++)
cout << "*";
cout << endl;  //new line
}
else
{
cout << "*";
for (int i = 0; i < spaces; i++)
cout << " ";
cout << "*";
cout << endl;  //new line
}
}
} //end

void leftTriangle(int a)
{
//get user input and print stars for first triangle
for (int b = a; b < a; b--)
{
for (int c = 0; c < b; c++)
cout << "*";
cout << endl; //new line
}
cout << endl; //new line
} //end

void rightTriangle(int a)
{
//get user input and print stars for second triangle
for (int b = 0; b < a; b++)
{
int stars = a - b;
for (int i = 0; i < b; i++)
cout << " ";
for (int i = 0; i < stars; i++)
cout << "*";
cout << endl; //new line
}
cout << endl; //new line
} //end

и, наконец, цифры.

//funtion prototypes

#ifndef FIGURES_H
#define FIGURES_H

void filledSquare(int);

void hollowSquare(int);

void leftTriangle(int);

void rightTriangle(int);

#endif;

Итак, я думаю, что моя проблема в том, что я неправильно вызываю определения функций из main. Я не уверен, что я просто не включил что-то правильно или что-то еще; Я был бы очень признателен за любую помощь.

Вот как выглядит мой вывод;

1. Square
2. Left Triangle
3. Right Triangle
Select an option: 1
Filled or hollow? [f/h]f
Input Size: 4
1. Square
2. Left Triangle
3. Right Triangle
Select an option:

-4

Решение

в вашем примере вы не вызываете функцию fillSquare, но вы объявляете ее снова, пока с тем же типом SIGNATURE и RETURN. в этом случае компилятор не будет жаловаться, например:

void foo(); // ok
void foo(); // ok
void foo(); // ok

все приведенные выше прототипы верны для компилятора, если они одинаковы во всем, НО вы должны предоставить одно определение только потому, что они являются прототипом одной и той же функции.

void foo(); // ok
foo(); // error foo differs only in return type which doesn't mean overloading it. this function without return type by default returns int
char foo(); // error foo differs only in return type.

приведенные выше прототипы неверны, потому что они отличаются только типом возврата. Для перегрузки функции подписи должны отличаться по количеству параметров или типу параметров (хотя бы по одному параметру они различаются) или по двум.

void foo();        // ok first prototype with which the compiler compare the following
int  foo(int);     // ok differs in number and type of parameters
foo(int&)     // ok differs in number and type of parameters
void foo(int, int) // ok differs in number and type of parameters

В вашем примере вы повторно объявляете fillSquare, если он уже объявлен.

void filledSquare(int size); // ??!! here you are not calling this function but you are declaring it instead.

чтобы вызвать функцию, просто поместите имя функции без возвращаемого типа и круглых скобок, в которые помещаются параметры, если для этого требуется НО, никогда не указывайте ТИП параметров.

filledSquare(size); // without return type nor type of parameters
0

Другие решения

Вы на самом деле не вызываете функции, а объявляете их.

Вы называете их так:

hollowSquare(size);
2

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector