所以这是我想要解决的原始问题;
*创建一个名为Lab5_Figures的项目。该项目应包含多个文件。编写一个程序,重复要求用户选择方形,左或右三角形,然后输入图形大小,然后在星形中打印适当的形状。对于square,程序应该询问用户是想要填充还是空心方块。如果用户输入无效选项,程序应该退出。请参阅下面的示例对话框:
选择数字:1
选择尺寸:4
填充或空心[f / h]:h
//打印出适当的数字,然后重复
您可以重用循环实验室中的代码(我已经这样做了)。将星号打印代码放在四个独立的函数中:filledSquare,hollowSquare,leftTriangle和rightTriangle。每个函数都应该接受一个整数参数 - 图的大小并且不返回任何值(是一个void函数)。创建三个单独的文件figures.cpp,figures.h和figuresInput.cpp。将三角形和方形函数定义放在figure.cpp中,将它们的原型放在figure.h中。确保头文件受到多重包含的保护。将main函数放在figuresInput.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
最后是figure.h
//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:
答案 0 :(得分:2)
你实际上并没有调用这些函数,而是声明它们。
你这样称呼它们:
hollowSquare(size);
答案 1 :(得分:0)
在您的示例中,您没有调用fillSquare函数,但只要具有相同的SIGNATURE和RETURN TYPE,就会再次声明它。在这种情况下,编译器不会抱怨例如:
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.
调用一个函数只是把函数的名称放在没有返回类型和括号的内部,如果它接受任何BUT,则放置参数永远不会说明参数的类型。
filledSquare(size); // without return type nor type of parameters