在C ++中,我试图实现一个枚举,作为方法中的参数被接受并始终接收链接错误(未定义的引用)。让我提供我的标题,实现和示例主要执行。另请注意,我正在使用Makefile,如果您认为该问题在Makefile中,则可以提供。
部首:
// Make sure definitions are only made once
//
#ifndef MYTEST_H
#define MYTEST_H
// System include files
//
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
// Declare class definitions
//
class MyTest {
// Public data
//
public:
// Define debug_level choices
//
enum DBGL {FULL = 0, PARTIAL, BRIEF, NONE};
// Define a debug_level variable
//
static DBGL debug_level_d;
// Define public method set_debug that sets debug level to a specific value
//
bool set_debug(DBGL x_a);
// End of include file
//
#endif
这是我的实施文件&#39; mytest_00.cc&#39;。在这里,我试图定义一个枚举类型&#34; DBGL&#34;作为调试级别。然后我试图接受它作为方法&#39; set_debug&#39;中的参数。
#include "mytest.h"
// Implementations of methods in MyTest
// Declare debug_level
//
static MyTest::DBGL debug_level_d = MyTest::FULL;
// Implement set_debug method to set the debug_level_d
// FULL = 0, PARTIAL = 1, BRIEF = 2, NONE = 3
//
bool MyTest::set_debug(MyTest::DBGL x_a) {
// Set debug_level_d to the argument provided
//
debug_level_d = x_a;
// exit gracefully
//
return true;
}
目标是测试课程“mytest”&#39;在main函数中执行类似的操作:
MyTest Test;
Test.set_debug(FULL);
此代码将设置变量&#39; debug_level_d&#39;作为参数传递。
编译时收到的错误如下:
g++ -O2 -c mytest.cc -o mytest.o
g++ -O2 -c mytest_00.cc -o mytest_00.o
g++ -g -lm mytest.o mytest_00.o -o mytest.exe
mytest_00.o: In function `MyTest::set_debug(MyTest::DBGL)':
mytest_00.cc:(.text+0x12): undefined reference to `MyTest::debug_level_d'
collect2: error: ld returned 1 exit status
make: *** [mytest.exe] Error 1
理解为什么会出现此错误的任何帮助都将非常感激。我现在已经坚持了一天。如果有任何细节需要进一步澄清,请告诉我。
谢谢。
答案 0 :(得分:1)
在定义 .cpp文件中的字段时,不应使用static关键字,只有在在类中声明时才使用。请注意您的代码注释&#34;声明&#34;和#34;定义&#34;错误的方式。
此外,在定义成员时,您需要使用类名对其进行限定。
所以.cpp定义应该是:
MyTest::DBGL MyTest::debug_level_d = MyTest::FULL;
通过在定义中使用static关键字,可以将其限制为内部链接。