I've read a few posts on here about static functions, but still am running into trouble with implementation.
I'm writing a hardcoded example of Dijkstra's algorithm for finding the shortest path.
Declared in Alg.h:
static void dijkstra(); Defined in Alg.cpp:
static void Alg::dijkstra() { //Create Map Initialize(); //Loop to pass through grid multiple times for(int i=0; i<5; i++) { current=1; while(current!=6) { //Iterate through and update distances/predecessors //For loop to go through columns, while current iterates rows for(int j=1; j<7; j++) { //Check if distance from current to this node is less than //distance already stored in d[j] + weight of edge if(distanceArray[current][j]+d[current]<d[j]) { //Update distance d[j] = distanceArray[current][j]+d[current]; //Update predecessor p[j] = current; } } //Go to next row in distanceArray[][] current++; } //End while } //End for output(); } //End Dijkstras I want to call my function from main without an object. When I had all of this code in Main.cpp, it worked perfectly. Splitting it up into separate files caused the error Main.cpp:15: error: ‘dijkstra’ was not declared in this scope.The posts I came across when searching SE gave me me the impression that to do this, I needed to make that method static, yet I still have no luck.
What am I doing wrong?
Main.cpp:
#include <iostream> #include "Alg.h" int main() { dijkstra(); return 0; } Edit: Added full header file, Alg.h:
#ifndef Alg_ #define Alg_ #include <iostream> #include <stack> using namespace std; class Alg { public: void tracePath(int x); void output(); void printArray(); void Initialize(); static void dijkstra(); int current, mindex; int distanceArray[7][7]; //2D array to hold the distances from each point to all others int d[6]; //Single distance array from source to points int p[6]; //Array to keep predecessors int copyD[6]; //Copy of d[] used for sorting purposes in tracePath() int order[6]; //Contains the order of the nodes path lengths in ascending order }; //End alg class #endif Original all-in-one working Main.cpp file: http://pastebin.com/67u9hGsL
dijkstrais supposed to be a class static?static. Your attempt to definestatic void Alg::dijkstra() {will immediately trigger a compile error inAlg.cpp. Yet, you report a completely different error. And you claim that this code "worked" inmain.cpp. This means that you posted fake code. Your claims are unrealistic. Post real code, please.Alg??? Is it a class? Is it a namespace?Algin that code. There's nostaticin that code.