Andrew Barajas
Andrew Barajas

Reputation: 5

Having errors with using a header and source files

I created a header called One.h to include my class of a 3d vector, and then I use a source file called main.cxx to input the class into an int function. However, I keep getting these errors, and I have been trying for days to fix it but I can't. I am new to C++.

/usr/include/c++/4.8.2/bits/stl_iterator_base_types.h:165:53:
error: no type named ‘iterator_category’ in ‘class Vector3d’
       typedef typename _Iterator::iterator_category iterator_category;
                                                     ^ 
/usr/include/c++/4.8.2/bits/stl_iterator_base_types.h:166:53: error:
no type named ‘value_type’ in ‘class Vector3d’
       typedef typename _Iterator::value_type        value_type;
                                                     ^ 
/usr/include/c++/4.8.2/bits/stl_iterator_base_types.h:167:53: error:
no type named ‘difference_type’ in ‘class Vector3d’
       typedef typename _Iterator::difference_type   difference_type;
                                                     ^ 
/usr/include/c++/4.8.2/bits/stl_iterator_base_types.h:168:53: error:
no type named ‘pointer’ in ‘class Vector3d’
       typedef typename _Iterator::pointer           pointer;
                                                     ^ 
/usr/include/c++/4.8.2/bits/stl_iterator_base_types.h:169:53: error:
no type named ‘reference’ in ‘class Vector3d’
       typedef typename _Iterator::reference         reference;
                                                     ^ 

One.h

#include <iostream>
#include <math.h>
#include <stdio.h>
using namespace std;

class Vector3d {
// Class of a Euclidean 3d vector
private:
    float x;
    float y;
    float z;

    // The x y and z components that are our private data members

public:
    Vector3d(float xaxis, float yaxis, float zaxis)
    {
        x = xaxis;
        y = yaxis;
        z = zaxis;
    }

    // Creating a constructor to help access the members of the class

    float getx() { return x; }
    float gety() { return y; }
    float getz() { return z; }

    // Used to actually get the values of our members so functions to print out values

    float normVector()
    {
        float result = sqrt(pow(x, 2) + pow(y, 2) + pow(z, 2));
        return result;
        // The norm of the vector an function with in the class
    }
};

float distance(Vector3d v1, Vector3d v2)
// We have a function outside the class, the arguments are objects of the same class but two different objects
// so like two different vectors
{
    return sqrt(
      pow(v1.getx() - v2.getx(), 2)
    + pow(v1.gety() - v2.gety(), 2)
    + pow(v1.getz() - v2.getz(), 2)
       );

    // In the function we can use v1.getx and v2.getx to access and put the values of the private members in the class

    // This is the distance formula between to vectors

main.cxx

#include "One.h"

int main()
{
    Vector3d v1(2, 2, 2);

    v1.getx();
    v1.gety();
    v1.getz();

    // Our vector one with defiining values

    v1.normVector();

    cout << "  Components and the norm of my first vector     " << endl;
    cout << " X1 axis \t\:\t "   << v1.getx() << endl;
    cout << " Y1 axis  \t\:\t "  << v1.gety() << endl;
    cout << " Z1 axis   \t\:\t "   << v1.getz() << endl;

    cout << " The norm of our first vector  \t\:\t " << v1.normVector() << endl;

    Vector3d v2(3, 3, 3);

    v2.getx();
    v2.gety();
    v2.getz();

    cout << "  Components and the norm of my second vector     " << endl;

    cout << " X2  axis \t\:\t " << v2.getx() << endl;
    cout << " Y2  axis  \t\:\t " << v2.gety() << endl;
    cout << " Z2  axis \t\:\t " << v2.getz() << endl;

    cout << " The norm of our second vector " << v2.normVector() << endl;

    cout << "The distance between vector one and two \t\:\t " << distance(v1, v2) << " units." << endl;

    // Here we can use the cout operator to compile the distance formula we created earlier and make it visible on the screen

    return 0;
}

Upvotes: 0

Views: 92

Answers (1)

Ruzihm
Ruzihm

Reputation: 20270

You have a collision between std::distance and your float distance(Vector3d v1, Vector3d v2) function.

Removing using namespace std; and qualifying with std:: where necessary will resolve that.

This is an example of why it is recommended to use rarely, if ever, using namespace std;.

Upvotes: 5

Related Questions