Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/142.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/jenkins/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
是否可以使用另一个cpp文件中定义的类而不是任何头文件? 有一个C++类,已经编译成一个库,但我可以访问它的源代码;然而,由于该类没有在任何头文件中定义,我不能简单地包含并链接库。我不想更改库源代码,但我希望为我利用类函数,这可能吗_C++_Shared Libraries_Static Libraries_Extern - Fatal编程技术网

是否可以使用另一个cpp文件中定义的类而不是任何头文件? 有一个C++类,已经编译成一个库,但我可以访问它的源代码;然而,由于该类没有在任何头文件中定义,我不能简单地包含并链接库。我不想更改库源代码,但我希望为我利用类函数,这可能吗

是否可以使用另一个cpp文件中定义的类而不是任何头文件? 有一个C++类,已经编译成一个库,但我可以访问它的源代码;然而,由于该类没有在任何头文件中定义,我不能简单地包含并链接库。我不想更改库源代码,但我希望为我利用类函数,这可能吗,c++,shared-libraries,static-libraries,extern,C++,Shared Libraries,Static Libraries,Extern,也许extern会有帮助,但我不知道正确的语法。如果不将类声明“移动”到库和应用程序都使用的头文件中,那么这样做是不可能的[或者至少不是一个好主意] 当然,从技术上讲,可以将类声明添加到.cpp文件(或某些头文件)中,但这不是很可靠,因为可能有人在库代码中更改了类,然后您就有了不兼容的类声明,这是“未定义的行为”-这意味着您的代码通常会执行您不希望它执行的操作 当然,类不在标题中这一事实似乎意味着它“仅供内部使用” 如果不将类声明“移动”到库和应用程序都使用的头文件中,那么这样做是不可能的[或者

也许
extern
会有帮助,但我不知道正确的语法。

如果不将类声明“移动”到库和应用程序都使用的头文件中,那么这样做是不可能的[或者至少不是一个好主意]

当然,从技术上讲,可以将类声明添加到.cpp文件(或某些头文件)中,但这不是很可靠,因为可能有人在库代码中更改了类,然后您就有了不兼容的类声明,这是“未定义的行为”-这意味着您的代码通常会执行您不希望它执行的操作


当然,类不在标题中这一事实似乎意味着它“仅供内部使用”

如果不将类声明“移动”到库和应用程序都使用的头文件中,那么这样做是不可能的[或者至少不是一个好主意]

当然,从技术上讲,可以将类声明添加到.cpp文件(或某些头文件)中,但这不是很可靠,因为可能有人在库代码中更改了类,然后您就有了不兼容的类声明,这是“未定义的行为”-这意味着您的代码通常会执行您不希望它执行的操作


当然,类不在标题中这一事实似乎意味着它“仅供内部使用”

使用类定义的副本创建头文件。如果您使用的是外部库,并且您想要使用的类没有通过头传播,那么您肯定不会使用它,因为它只是一些内部内容。如果你知道你在做什么,那么按照Igor的建议去做。@IgorTandetnik所以我应该复制所有的类定义(它对变量的定义和它对函数成员的声明),而不是我真正需要的成员函数?是的,你必须复制完整的定义。否则,这两个模块将无法在类实例的大小和内存布局上达成一致。@IgorTandetnik:我认为您混淆了“定义”和“声明”。请创建一个包含类定义副本的头文件。如果您使用的是外部库,并且您想要使用的类没有通过头传播,那么您肯定不会使用它,因为它只是一些内部内容。如果你知道你在做什么,那么按照Igor的建议去做。@IgorTandetnik所以我应该复制所有的类定义(它对变量的定义和它对函数成员的声明),而不是我真正需要的成员函数?是的,你必须复制完整的定义。否则,这两个模块将无法在类实例的大小和内存布局上达成一致。@IgorTandetnik:我认为您混淆了“定义”和“声明”。要更改源代码并重建库,需要一个头文件。谁会匿名这样做,而不把头文件留给新库?他会留下一些标记吗,比如一只带花押的手套,或者一朵一分为二的玫瑰?@Beta:听起来像是“源代码管理”。显然,这在很大程度上取决于来源地以及谁拥有它的权利,这是否是可以做到的。我的观点是,如果没有类的外部声明,那么如果使用新版本的库,那么类很可能会不同,这会导致问题-我不认为这里有偷偷摸摸的忍者程序员。如果OP将此代码用作共享资源,但无法与更改库并访问头文件的人进行通信,则存在邪恶;要么是夜间编程的忍者程序员,要么是极度无能的项目管理。。。没错,它不是一个忍者程序员。要更改源代码并重建库,需要一个头文件。谁会匿名这样做,而不把头文件留给新库?他会留下一些标记吗,比如一只带花押的手套,或者一朵一分为二的玫瑰?@Beta:听起来像是“源代码管理”。显然,这在很大程度上取决于来源地以及谁拥有它的权利,这是否是可以做到的。我的观点是,如果没有类的外部声明,那么如果使用新版本的库,那么类很可能会不同,这会导致问题-我不认为这里有偷偷摸摸的忍者程序员。如果OP将此代码用作共享资源,但无法与更改库并访问头文件的人进行通信,则存在邪恶;要么是夜间编程的忍者程序员,要么是极度无能的项目管理。。。你说得对,它不是一个忍者程序员。