2015-09-19 55 views
0

嗨我得到每个函数的错误,我试过“功能没有在此范围内声明”。我是C++的新手,并试图让我的技术援助来解决这个问题,但还没有弄明白。感谢您的帮助!C++链接头/主错误

这里是我的头文件(circle.h):

#ifndef _CIRCLE_H_ 
#define _CIRCLE_H_ 

class circle 
{ 
private: 
    double x1; 
    double x2; 
    double y1; 
    double y2; 
protected: 
    double distance(double x1, double y1, double x2, double y2); 
public: 
    double radius(double x1, double y1, double x2, double y2); 
    double circumference(double x1, double y1, double x2, double y2); 
    double area(double x1, double y1, double x2, double y2); 
    void populate_classobj(double x1, double y1, double x2, double y2); 
}; 
#endif 

这里就是我定义我的类函数(circle.cc):

#include <cmath> 
#include "circle.h" 
#define PI (4*atan(1)) 
using namespace std; 

double circle::distance(double x1, double y1, double x2, double y2) { 
    double dist; 
    dist = sqrt(pow((x2-x1),2)+pow((y2-y1),2)); 
    return dist; 
} 

double circle::radius(double x1, double y1, double x2, double y2) { 
    return distance(x1, y1, x2, y2); 
} 

double circle::area(double x1, double y1, double x2, double y2) { 
    double circle_area = PI*(pow(radius(x1, y1, x2, y2),2)); 
    return circle_area; 
} 

double circle::circumference (double x1, double y1, double x2, double y2) { 
    double circ = 2*PI*radius(x1, y1, x2, y2); 
    return circ; 
} 

void circle::populate_classobj (double x_1, double y_1, double x_2, double y_2) { 
    double x1 = x_1; 
    double y1 = y_1; 
    double x2 = x_2; 
    double y2 = y_2; 
} 

这里是我的主(主。立方厘米):

#include <iostream> 
#include <cmath> 
#include "circle.h" 
using namespace std; 

int main() 
{ 
    double x_1, y_1, x_2, y_2; 
    int switch_val; 
    cout << "Enter x1 coordinate: "; 
    cin >> x_1; 
    cout << "Enter y1 coordinate: "; 
    cin >> y_1; 
    cout << "Enter x2 coordinate: "; 
    cin >> x_2; 
    cout << "Enter y2 coordinate: "; 
    cin >> y_2; 
    circle mycircle; 
    mycircle.populate_classobj (x_1, y_1, x_2, y_2); 
    do{ 
     cout << "1 for radius, 2 for circumference, 3 for area, 4 for exit" << endl; 
     cout << "Enter your desired computation: "; 
     cin >> switch_val; 
     switch(1) { 
      case 1: cout << "Radius is: " <<endl; 
        cout << radius(x_1, y_1, x_2, y_2); 
        break; 
      case 2: cout << "Circumference is: " <<endl; 
        cout << circumference (x_1, y_1, x_2, y_2); 
        break; 
      case 3: cout << "Area is: " <<endl; 
        cout << area(x_1, y_1, x_2, y_2); 
        break; 
      case 4: cout << "Exiting program... "<< endl; 
        break; 
      default: cout << "Invalid input please re-input value"<<endl; 
        break; 
     } 
    }while(switch_val != 4); 
    return 0; 
} 

我认为这是与我的#include报表,但我不知道。谢谢!

+0

针对您的问题的更具体的标题对于可能有相同问题的其他人来说会很好。 – Gombat

+0

您的main.cc是否包含'#include“circle.h”'行? –

回答

2

在您的switch中,您确实使用了类circle的方法,如radius。类,所谓的方法的功能只能用该类的现有实例进行调用。

E.g.

circle mycircle; 
double radius = mycircle.radius(1.0,2.0,3.0,4.0); 

将工作。

但是,如果方法不需要该类的任何成员变量,则可以声明它为static。只是写在函数之前的单词,在头:

`static double radius(double x1, double y1, double x2, double y2);` 

现在你可以把它叫做无circle一个实例。

double radius = circle::radius(1.0,2.0,3.0,4.0); 

您只需要使用类名称空间来让编译器知道函数来自哪里。