2012-10-13 65 views
-2

我想創建一個C++類,該類僅與靜態函數結合使用,不管使用什麼靜態函數。我已經創建了帶有聲明的.h文件和帶有定義的.cpp文件。但是,當我在代碼中使用它時,我收到了一些我不知道如何解決的奇怪錯誤消息。C++:如何用靜態函數定義一個類

這裏是我的Utils.h文件的內容:

#include <iostream> 
#include <fstream> 
#include <sstream> 

#include <opencv2/core/core.hpp> 
#include <opencv2/highgui/highgui.hpp> 

using namespace std; 
using namespace cv; 

#include <vector> 
#include <opencv/cv.h> 
#include <opencv/cxcore.h> 

class Utils 
{ 
public: 
    static void drawPoint(Mat &img, int R, int G, int B, int x, int y); 
}; 

這裏是我的Utils.cpp文件的內容:

#include "Utils.h" 

void Utils::drawPoint(Mat &img, int R, int G, int B, int x, int y) 
{ 
img.at<Vec3b>(x, y)[0] = R; 
img.at<Vec3b>(x, y)[1] = G; 
img.at<Vec3b>(x, y)[2] = B; 
} 

這是我多麼希望在我main功能的使用方法:

#include <iostream> 
#include <fstream> 
#include <sstream> 

#include <opencv2/core/core.hpp> 
#include <opencv2/highgui/highgui.hpp> 

using namespace std; 
using namespace cv; 

#include <vector> 
#include <opencv/cv.h> 
#include <opencv/cxcore.h> 

#include "CThinPlateSpline.h" 
#include "Utils.h" 

int main() 
{ 
Mat img = imread("D:\\image.png"); 
if (img.empty()) 
{ 
    cout << "Cannot load image!" << endl; 
    system("PAUSE"); 
    return -1; 
} 
Utils.drawPoint(img, 0, 255, 0, 20, 20); 
imshow("Original Image", img); 
waitKey(0); 
return 0; 
} 

這裏是我的錯誤接收。

有人可以指出我做錯了什麼嗎?我錯過了什麼?

+5

爲什麼不復制錯誤呢,沒有頭文件編譯 –

+1

你忘了再次複製錯誤.. – none

回答

5
Utils::drawPoint(img, 0, 255, 0, 20, 20); 
    ^^ (not period) 

是你將如何調用靜態函數。這段時間是爲了成員訪問(即當你有一個實例時)。

來說明這個的完整性:

Utils utils; << create an instance 
utils.drawPoint(img, 0, 255, 0, 20, 20); 
    ^OK here 
1

認爲你在課後減速時丟失了一個分號。嘗試,

class Utils 
{ 
public: 
    static void drawPoint(Mat &img, int R, int G, int B, int x, int y); 
}; // <- Notice the added semicolon 
0

這不是直接回答你的問題,但使用的命名空間範圍的功能可能會滿足您的需求更好。我的意思是:

namespace Utils 
{ 
    void drawPoint(Mat &img, int R, int G, int B, int x, int y); 
} 

::語義則不變,但現在:

  • 你不能實例化一個Utils對象,這是毫無意義的「靜態類」
  • 你可以請使用using Utils以避免所選(和限制)示波器中的Utils::前綴

要進行更深入的討論靜態類成員函數vs命名空間作用域函數的優缺點見:Namespace + functions versus static methods on a class

相關問題