编译时出现C ++错误,错误(未解析的外部符号)

时间:2014-11-19 22:51:48

标签: c++

我正在使用visual basic 2010.我已经尝试了一切我能想到的消除这些错误的方法。这是程序背后的一个简单的想法,但我很好奇这个问题是否与我如何引用或调用我的变量有关。我是C ++的新手,任何帮助或建议都会受到极大的欢迎。提前谢谢。

Box.cpp

#include "stdafx.h"
#include "Box.h"
#include <iostream>
#include <iomanip>

using namespace std;


double getVolume(int A, int B, int C){
double totalVolume;
totalVolume = A * B * C;
return totalVolume;
}
double getSurfaceArea(int A, int B, int C){
double totalSurface;
totalSurface = (A*B*2) + (B*C*2) + (A*C*2);
return totalSurface;
}
bool perfectBox(int A, int B, int C){
bool perfect;
if (A = B) 
    if (B = C)
        perfect = true;
    else
        perfect = false;
else
    perfect = false;
return perfect;
}

// Box.h

class Box
{
public:

int A, B, C;
Box(int A, int B, int C);

double getVolume(int A, int B, int C);
// get volume of entered sides


double getSurfaceArea(int A, int B, int C);
// calculate surgace are based on sides

bool perfectBox(int A, int B, int); 
// compare all 3 sides to determine if box is perfect

};

// Main.cpp的

#include "stdafx.h"
#include "Box.h"
#include <iostream>

using namespace std;

Box::Box(int a, int b, int c){

}

int main()
{ 
int a, b, c;
cout << "Enter 3 side lengths of a box to determine volume, surface area and if it's perfect...
\n";
cout << "length of Side 1: ";
cin >> a;
cout << endl << "Side 2: ";
cin >> b;
cout << endl << "Side 3: ";
cin >> c;

Box test(a, b, c);
cout << "Total Area: " << test.getVolume(a, b, c) << endl;
cout << "Total Surface: " << test.getSurfaceArea(a, b, c) << endl;
cout << "Is it a perfect box: " << test.perfectBox(a, b, c) << endl;

system ("Pause");
return 0;
}

3 个答案:

答案 0 :(得分:2)

您错过了名称空间声明。当你引用getVolume时,它不仅仅是getVolume,而是Box :: getVolume。

double Box::getVolume(int A, int B, int C){
double totalVolume;
totalVolume = A * B * C;
return totalVolume;
}
double Box::getSurfaceArea(int A, int B, int C){
double totalSurface;
totalSurface = (A*B*2) + (B*C*2) + (A*C*2);
return totalSurface;
}
bool Box::perfectBox(int A, int B, int C){
bool perfect;
if (A = B) 
    if (B = C)
        perfect = true;
    else
        perfect = false;
else
    perfect = false;
return perfect;
}

答案 1 :(得分:1)

您能否显示编译器输出? 在你的构造函数中,你还没有分配A,B,C所以也许那里有一个问题。你也使用赋值运算符,即=,而不是比较运算符,即==这是两个不同的命令。

答案 2 :(得分:0)

简单规则:要使用的每个类的函数都必须在类的.h文件中声明[float functioName(int param)]。这包括构造函数classname(int a);


box.h中缺少构造函数声明

Box(int a, int b, int c);

应该在box.cpp中移动

Box::Box(int a, int b, int c)
{

}

我们计算机科学研究员的提示:

首先包括系统头然后是本地头:

#include <iostream>
#include <iomanip>
#include "stdafx.h"
#include "Box.h"

而不是(不同的顺序取决于&lt;&gt;或“”):

#include "stdafx.h"
#include "Box.h"
#include <iostream>
#include <iomanip>

.h文件中也缺少功能。 box.cpp中定义的每个函数都必须在box.h中声明。

声明:

float getVolume();

定义:

float Box::getVolume()
{
  float localVariableForVolume = A*B*C;
  //this works too float localVariableForVolume = this->A*this->B*this->C;
  return(localVariableForVolume);
}