这是一个非常奇怪的问题.我有两个类:一个自定义控制台类(CConsole)和一个测试类(CHashTableTest),我已经使用map和unordered_maps来了解它们的工作原理.
在我的控制台类中,我有一个CConsole的公共静态成员变量,它将静态控制台对象暴露给项目的其余部分,以便我可以随时写入此控制台.这适用于我的所有类,包括测试类,但仅当测试类使用map而不是unordered_map时!
我收到的错误是:
错误LNK2001:未解析的外部符号"public static class CConsole CConsole:output"(?output @ CConsole @@ 2V1 @ A)
它来自调用测试类上的方法而不是测试类本身的类,但调用类中没有发生任何奇怪的事情,它只是实例化CHashTableTest对象(传入CConsole对象)并调用Add和Get.它被放置在一个单独的项目中,但是当我使用map时这不是问题,因为使用_declspec(ddlexport)将静态成员变量设置为外部.
该解决方案在Visual Studio 2012中设置,CConsole和CHashTableTest类位于DLL项目中,该项目是存在调用代码的单元测试项目的外部引用.
CConsole和CHashTableTest文件:
Console.h
#ifndef _CONSOLE_H_
#define _CONSOLE_H_
#define _CRT_SECURE_NO_DEPRECATE
#include <iostream>
#include <fstream>
#include <string>
#include <ctime>
#include <time.h>
// Defines a set of output modes for the CConsole class. This will affect what output the console will target.
// The default is COUT.
enum _declspec(dllexport) EConsoleMode
{
// Output sent to a CConsole object will be printed using cout.
COUT, …Run Code Online (Sandbox Code Playgroud) 电话:博士
我怎么可以连接
const char*带std::string,整齐而优雅,没有多个函数调用。理想情况下,在一个函数调用中,输出为const char*. 这是不可能的,什么是最佳解决方案?
到目前为止,我在 C++ 中遇到的最大障碍是它如何处理字符串。在我看来,在所有广泛使用的语言中,它处理字符串的能力最差。我见过其他与此类似的问题,这些问题的答案要么是“使用std::string”,要么只是指出其中一个选项最适合您的情况。
然而,当尝试像在其他语言中那样动态地使用字符串时,这是无用的建议。我不能保证总是能够使用,std::string并且在我必须使用的时候,const char*我碰到了“它是恒定的,你不能连接它”的明显墙。
我在 C++ 中看到的任何字符串操作问题的每个解决方案都需要重复的多行代码,这些代码仅适用于该字符串格式。我希望能够将任何字符集与+符号连接起来,或者像format()在 C# 或 Python 中一样使用一个简单的函数。为什么没有简单的选择?
标准输出
我正在编写一个 DLL,到目前为止我已经cout通过<<操作符输出了文本。到目前为止,使用以下形式的简单字符数组一切正常:
cout << "Hello world!"
Run Code Online (Sandbox Code Playgroud)
运行时字符串
现在到了我想在运行时构造一个字符串并将其与一个类一起存储的点,这个类将保存一个报告一些错误的字符串,以便其他类可以获取它们并可能cout稍后发送给字符串将由函数设置SetReport(const char* report)。所以我真的不想为此使用多于一行,所以我继续写一些类似的东西:
SetReport("Failure in " + __FUNCTION__ + ": foobar was " + foobar + "\n"); // __FUNCTION__ gets the name of the current function, foobar is some …Run Code Online (Sandbox Code Playgroud)