gpt4 book ai didi

c++ - 奇数重复符号错误

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:40:58 24 4
gpt4 key购买 nike

对于一个学校项目,类(class)被要求编写一个 String 类来模仿 STL string 类。

我已经编写了所有代码,但链接器似乎被我的一个运算符捕获了。

共有三个文件,String.hString.cpptest2.cpp

我的 Makefile 看起来像

CC=gcc
CXX=g++
CXXFLAGS+=-Wall -Wextra
LDLIBS+=-lstdc++

all:test2

test2:test2.o String.o
test2.o:test2.cpp String.h
String.o:String.cpp String.h

make 输出如下:

g++ -Wall -Wextra   -c -o test2.o test2.cpp
g++ -Wall -Wextra -c -o String.o String.cpp
g++ test2.o String.o -lstdc++ -o test2
ld: duplicate symbol operator==(String const&, char const*)in String.o and test2.o
collect2: ld returned 1 exit status
make: *** [test2] Error 1

这很奇怪,因为我定义 operator == 的唯一地方是在 String.h 中:

#ifndef MY_STRING_H
#define MY_STRING_H
#include <ostream>
#include <istream>

class String {
//...
};

// ... operators ...

bool operator ==(const String& left, const char* right)
{ return left.compare_to(right)==0; }
bool operator ==(const char* left, const String& right)
{ return right.compare_to(left)==0; }
bool operator ==(const String& left, const String& right)
{ return left.compare_to(right)==0; }

// ... other comparison operators ...
#endif

test2.cpp 只有一个简单的 main 方法:

#include "String.h"
using namespace std;

int main() {

}

那么,如果我只在一个地方定义operator ==(const String&, const char*),为什么它说我有一个重复的符号?

最佳答案

您在头文件中提供了运算符的定义,该头文件被String.cpptest2.cpp 包含。
您应该将定义移动到一个源文件中,并且只在头文件中提供声明

// in String.h:
bool operator==(const String& left, const char* right);

// in String.cpp:
bool operator ==(const String& left, const char* right) {
return left.compare_to(right)==0;
}

关于c++ - 奇数重复符号错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2219243/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com