C:\ Users \ George \ Desktop \ linear_equation_calc \ main.cpp ||在功能中 'int main(int,const char **)':| C:\ Users \用户乔治\桌面\ linear_equation_calc \ main.cpp中| 101 |错误: 'calcparallelplugin'未在此范围中声明 || ===构建完成:1个错误,0个警告=== |
这是我不断得到的错误。我明白什么声明的意思,但我真的不明白我应该如何声明它使用calcparallelplugin()来链接另一个.cpp文件。我知道它的标准做法不是单独的.cpp文件而不是标题。有人用非常简单的术语解释,我现在和s ***一样厚,
#include <iostream>
#include <string.h>
using namespace std;
// Function includes
// I try to keep them in the order they appear in the
// output below for organization purposes
#include "calc.m.xy12plugin.cpp"
#include "calc.b.xymplugin.cpp"
#include "calc.m.xybplugin.cpp"
#include "calc.point.xymplugin.cpp"
#include "calc.parallelplugin.cpp"
// The above one would be here, too
int main(int argc, const char* argv[]) {
int i;
i = 0;
cout << "Linear Equation Calculator" << endl << "Copyright (c) 2011 Patrick Devaney" << endl
<< "Licensed under the Apache License Version 2" << endl;
// This loop makes the code a bit messy,
// but it's worth it so the program doesn't
// crash if one enters random crap such as
// "zrgxvd" or "54336564358"
while(i < 1) {
cout << "Type:" << endl
<< "0 to calculate a slope (the M value) based on two points on a line" << endl
<< "1 to calculate the Y-intercept (the B value) based on two points and a slope" << endl
<< "2 to calculate the slope (the M value) based on the Y-intercept and X and Y" << endl <<
"plug-ins" << endl
<< "3 to find the next point up or down a line based on the slope (M) and X and Y"
<< endl << "plug-ins" << endl
<< "4 to find a point x positions down the line based on the slope (M) and X and Y"
<< endl << "plug-ins" << endl
<< "5 to find the equation of a parallel line in form y=mx+c"
<< endl << "plug-ins" << endl;
string selection;
cin >> selection;
if(selection == "0") {
mcalcxyplugin();
i++;
}
else if(selection == "1") {
calcbxymplugin();
i++;
}
else if(selection == "2") {
calcmxybplugin();
i++;
}
else if(selection == "3") {
calcpointxymplugin(1);
i++;
}
else if(selection == "4") {
int a;
cout << "How many points up/down the line do you want? (Positive number for points" << endl
<< "further up, negative for previous points" << endl;
cin >> a;
calcpointxymplugin(a);
i++;
}
else if(selection == "5"){
calcparallelplugin();
i++;
}
else {
i = 1;
}
// End of that loop below
}
return 0;
}
答案 0 :(得分:3)
在此范围内未声明的错误意味着这一点。在所有#include<...>
文件都包含在主文件中之后,编译器找不到该函数,因此它不知道该怎么做。
但是,这也适用于另一种情况:
#include <iostream>
int main(int argc, char** argv)
{
testfunc();
}
void testfunc()
{
std::cout << "test!" << std::endl;
}
在这种情况下,问题的原因是编译器需要向前声明函数 - 即它需要函数原型。这将有效:
#include <iostream>
void testfunc(); // the compiler sees this and knows the linker
// has the responsibility of finding this symbol.
int main(int argc, char** argv)
{
testfunc();
}
void testfunc()
{
std::cout << "test!" << std::endl;
}
关于范围界定还有另一个案例。命名空间会影响范围,例如:
#include <iostream>
void testfunc();
int main(int argc, char** argv)
{
testfunc();
}
namespace test
{
void testfunc()
{
std::cout << "test!" << std::endl;
}
}
也会失败。对于您的原型,您需要void test::testfunc();
。这是因为命名空间的内部本身就是一个范围,而不是全局范围::
。通过在代码中编写using namespace std;
,您可以在全局命名空间中的std
中使用函数。
我还注意到您使用.cpp
作为您的包含。约定是对头文件使用.h
或.hpp
,头文件通常包含相应.cpp
实现的前向声明,类等。
所以,我会检查一下: