1. 程式人生 > 其它 >已解決 !Dll封裝 類中 友元函式報錯 不能夠 呼叫。無法解析的外部符號???

已解決 !Dll封裝 類中 友元函式報錯 不能夠 呼叫。無法解析的外部符號???

技術標籤:c++報錯c++

今天在完成老師佈置給的作業時,進行測試時遇到了這個錯誤。在此記錄一下,也為了幫助同樣遇到錯誤的同學。
在這裡插入圖片描述
逐一刪除測試程式碼做了測試發現問題出在友元函式。

#include <one.h>
#include<pch.h>
int main() {
	int arr[] = { 1,2,3,4,5,6 };
	int n = 6;
	Array a(arr, n);
	++a; //成員函式前置自增
	a++; //成員函式後置自增
	//--a; //友元函式前置自減
	//a--; //友元函式後置自減
	a.print();
}

原因

  • 友元函式不屬於類的成員函式
  • 我只對類做了 關鍵字宣告
  • 沒有對友元函式做宣告
  • 所以不能夠呼叫

原始碼.h檔案:

#pragma once
#ifdef DLL2_EXPORTS
#define C_TEST __declspec(dllexport)
#else
#define C_TEST __declspec(dllimport)
#endif

#include <iostream>
using namespace std;
class C_TEST Array {  //只對這裡做了關鍵字宣告
private:
	int *p;
	int n;
public:
	Array();
	Array(Array &
s); Array(int arr[], int m); void operator ++() ; void operator ++(int); friend void operator--(Array &d); friend void operator--(Array &d, int); void print() ; ~Array(); };

修改後:

#pragma once
#ifdef DLL2_EXPORTS
#define C_TEST __declspec(dllexport)
#else
#define C_TEST __declspec(dllimport)
#endif #include <iostream> using namespace std; class C_TEST Array { private: int *p; int n; public: Array(); Array(Array &s); Array(int arr[], int m); void operator ++() ; void operator ++(int); friend void C_TEST operator--(Array &d);//加上了宣告 friend void C_TEST operator--(Array &d, int);//加上了宣告 void print() ; ~Array(); };