ObjectARX acrxEntryPoint.cpp(89): error C3861: “ChangeColor”: 找不到標識符

#pragma once
class Modify
{
public:
	Modify();


	static AcDbObjectId CreateLine();
	static ErrorStatus ChangeLayer(AcDbObjectId entId, CString strLayerName);
	~Modify();
};



定義#include "Modify.h"
#include "stdafx.h"
#include "Modify.h"


Modify::Modify()
{
}


Modify::~Modify()
{
}

//創建和編輯基本圖形對象

//返回圖形數據庫,爲新添加的直線分配ID
AcDbObjectId Modify::CreateLine()
{
	AcGePoint3d ptStart(0, 0, 0);
	AcGePoint3d ptEnd(100, 100, 0);
	AcDbLine *pLine = new AcDbLine(ptStart, ptEnd);
	//
	AcDbBlockTable *pBlockTable;
	acdbHostApplicationServices()->workingDatabase()
		->getBlockTable(pBlockTable, AcDb::kForRead);
	//獲得指向特定的塊表記錄(模型空間)的指針
	AcDbBlockTableRecord *pBlockTableRecord;
	pBlockTable->getAt(ACDB_MODEL_SPACE, pBlockTableRecord, AcDb::kForWrite);
	//將AcDbLine類的對象添加到塊表記錄中
	//AcDbObjectId lineId;
	//pBlockTableRecord->appendAcDbEntity(lineId, pLine);
	//pLine->setColorIndex(1);

	AcDbObjectId lineId;
	pBlockTableRecord->appendAcDbEntity(lineId, pLine);

	//關閉圖形數據庫的各種對象
	pBlockTable->close();
	pBlockTableRecord->close();
	pLine->close();

	return lineId;
}


ErrorStatus Modify::ChangeColor(AcDbObjectId entId, Adesk::UInt16 colorIndex)
{
	AcDbEntity *pEntity;
	//打開圖形數據庫中的對象
	acdbOpenObject(pEntity, entId, AcDb::kForWrite);

	//修改實體顏色
	pEntity->setColorIndex(colorIndex);

	//用完之後及時關閉
	pEntity->close();

	return Acad::eOk;
}

實現函數
	static void AAAMyGroupMyCommand () {
		// Put your command code here
		acutPrintf(_T("MyCommand () "));

		//創建直線
		acutPrintf(_T("創建直線"));
		AcDbObjectId lineId;
		lineId = CreateLine();

		//修改直線的顏色
		acutPrintf(_T("修改直線的顏色"));
		ChangeColor(lineId, 1);

	}


編譯,出現錯誤:

可是已經在acrxEntryPoint.cpp中包含了頭文件#include "Modify.h"。

解決方法:

<類名>::<靜態成員函數>

lineId = Modify::CreateLine();

Modify::ChangeColor(lineId, 1);

因爲

static AcDbObjectId CreateLine();

static ErrorStatus ChangeColor();

兩個函數爲靜態成員函數,調用是需要加 <類名>::

關於C++靜態成員函數的分析請看鏈接:點擊打開鏈接


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章